重构的概念已经为广大的程序员所熟悉。但是还是有很多细节可以注意。
public static String getHiddenEmail(String email, int prefix, int suffix) {
// 仅对包含@的email账户进行处理
if (StringUtil.isBlank(email) || !StringUtil.contains(email, "@")) {
return email;
}
int length = email.length();
if (length < DEFAULT_TOTAL) {
return email;
}
// @所在位置
int splitPos = StringUtil.lastIndexOf(email, '@');
// @前的字符段
String preEmail = StringUtil.substring(email, 0, splitPos);
if (StringUtil.isBlank(preEmail)) {
return email;
}
// @后的字符段,包含@
String latEmail = StringUtil.substring(email, splitPos, length);
if (StringUtil.isBlank(latEmail)) {
return email;
}
if (preEmail.length() > 17)
preEmail = StringUtil.abbreviate(preEmail, prefix);
if (latEmail.length() > 13)
latEmail = StringUtil.abbreviate(latEmail, suffix);
return preEmail.concat(latEmail);
}
以上的code在我看来,有以下几个缺点。
1 方法名和实际的方法体不匹配。
2 魔数
3 if (StringUtil.isBlank(latEmail)) 永远返回false,因为当程序执行到这里,latEmail至少包括一个字符@。
4 方法中的代码的内聚性不够。主要是对preEmail和latEmail的处理分开了。
5 拼写错误,应该为lastEmail而误拼为latEmail
清洗代码后如下
private static String getAbbreviatedEmail(String email, int prefix, int suffix) {
if (StringUtil.isBlank(email)) {
return email;
}
if (email.length() <= DEFAULT_TOTAL) {
return email;
}
// @所在位置
int splitPos = StringUtil.lastIndexOf(email, '@');
if (splitPos == -1 || splitPos == 0|| splitPos == email.length() - 1) {
return email;
}
// @前的字符段
String preEmail = StringUtil.substring(email, 0, splitPos);
if (preEmail.length() > DEFAULT_PREFIX_LENGTH) {
preEmail = StringUtil.abbreviate(preEmail, prefix);
}
// @后的字符段,包含@
String lastEmail = StringUtil.substring(email, splitPos, email.length());
if (lastEmail.length() > DEFAULT_SUFFIX_LENGTH) {
lastEmail = StringUtil.abbreviate(lastEmail , suffix);
}
return preEmail+lastEmail ;
}
其实我个人最喜欢的风格是简单的方法的guard condition不用大括号{},这样代码变为
private static String getAbbreviatedEmail(String email, int prefix, int suffix) {
if (StringUtil.isBlank(email))
return email;
if (email.length() <= DEFAULT_TOTAL)
return email;
// @所在位置
int splitPos = StringUtil.lastIndexOf(email, '@');
if (splitPos == -1 || splitPos == 0|| splitPos == email.length() - 1)
return email;
// @前的字符段
String preEmail = StringUtil.substring(email, 0, splitPos);
if (preEmail.length() > DEFAULT_PREFIX_LENGTH) {
preEmail = StringUtil.abbreviate(preEmail, prefix);
}
// @后的字符段,包含@
String lastEmail = StringUtil.substring(email, splitPos, email.length());
if (lastEmail.length() > DEFAULT_SUFFIX_LENGTH) {
lastEmail = StringUtil.abbreviate(lastEmail , suffix);
}
return preEmail+lastEmail ;
}
谢谢论坛上朋友的讨论,preEmail+latEmail这个地方用+号比用concat方法好。
分享到:
相关推荐
《重构:改善既有代码的设计》是一本在IT领域广受推崇的经典著作,专注于软件开发中的重构实践,尤其针对Java编程语言。重构是软件开发过程中的一个重要环节,它旨在提升代码的可读性、可维护性和整体质量,而不会...
《重构:改善既有代码的设计》这本书为软件工程师提供了一套系统的方法论,帮助他们在实践中有效地改善既有代码的质量。通过对代码进行持续不断的优化,不仅能够提高软件产品的整体质量,还能提升开发团队的工作效率...
这是一种常见的重构技巧,涉及将一段代码提取到一个单独的方法中,并替换原始代码中的相应部分。这种方法可以提高代码的可读性和可维护性。 **移动功能(Move Function)**: 当某个类中的某些功能更适合另一个类时...
2. **提取方法**:将一段代码封装成一个独立的方法,使其更易于复用和测试。 3. **内联方法**:如果一个方法仅在一处调用,并且其功能可以很容易地融入调用者,则可以考虑将其内联。 4. **移动功能**:将一个方法或...
重构是软件开发过程中一个至关重要的环节,它旨在不改变代码外在行为的前提下,改进代码结构,使之更易理解和修改。此书深入浅出地介绍了重构的概念、原则和实践方法,对于任何Java开发者来说,都是提升编码技艺的...
《重构:改善既有代码的设计》是一本在IT行业中极具影响力的著作,由马丁·福勒(Martin Fowler)撰写。这本书深入探讨了重构这一编程实践,旨在提高软件的质量、可读性和可维护性,同时保持现有功能的稳定。通过一...
首先,提取函数是一种常见的重构手法,它将一段复杂的代码块封装成独立的函数,使代码更易于理解和测试。这样做可以使代码逻辑更清晰,同时也便于复用和修改。 其次,提取类是为了更好地实现面向对象编程,将一组...
通过重构,设计人员可以避免过度设计,只需先找到合理解决方案,后续实践中再根据实际情况优化。 识别代码的“坏味道”是重构的重要步骤。例如,重复代码是常见的问题,可以通过提炼函数或应用设计模式如Template ...