我已经为我的应用中的功能编写了以下字符串比较操作。
但是我讨厌它看起来的方式以及它是多么笨拙。
String foo = "abc";
if(!foo.startsWith("ba") &&
!foo.equals("cab") &&
!foo.equals("bca") &&
!foo.equals("bbc") &&
!foo.equals("ccb") &&
!foo.equals("cca"))
{
// do something
}
是否有更优雅,更可维护的方式来写这样的东西?
答案 0 :(得分:7)
您可以使用正则表达式。
private static final Pattern P = Pattern.compile(
"(ba.*|cab|bca|bbc|ccb|cca)");
String foo = "abc";
if (!P.matcher(foo).matches())
答案 1 :(得分:6)
如果您的代码中只有一次这样的条件,我会这样做。如果你有几次,请初始化一个常量集:
private static final Set<String> STRINGS_TO_AVOID =
Collections.unmodifiableSet(new HashSet<String>(Arrays.asList("cab", "bca", "bbc", "ccb", "cca")));
...
if (!foo.startsWith("ba") && !STRINGS_TO_AVOID.contains(foo)) {
...
}
答案 2 :(得分:0)
正则表达式(理想情况下)或if / else块。这是对Java正则表达式的温和介绍:
答案 3 :(得分:0)
使用您的示例,您可以使用HashSet来放置您想要比较的所有字符串。
然后你可以简单地输入
if (!foo.startsWith("ba") && !mySet.contains(foo)) {
//doSomething
}
答案 4 :(得分:0)
有人可能会争辩说,以下内容比原始代码更“优雅”。
if (!foo.matches("^ba.*|^cab$|^bca$|^bbc$|^ccb$|^cca$")) {
// do something
}
我更喜欢原版,因为它最简单,使用任何人都能理解的自然语言,因此它更易于维护......