[英]What's a more stylistically elegant way to assess a large number of Java string comparison conditions?
我已經為我的應用程序中的功能編寫了以下字符串比較操作。
但我討厭這種外觀和它有多笨重的方式。
String foo = "abc";
if(!foo.startsWith("ba") &&
!foo.equals("cab") &&
!foo.equals("bca") &&
!foo.equals("bbc") &&
!foo.equals("ccb") &&
!foo.equals("cca"))
{
// do something
}
是否有更優雅,也許更可維護的方式來寫這樣的東西?
您可以使用正則表達式。
private static final Pattern P = Pattern.compile(
"(ba.*|cab|bca|bbc|ccb|cca)");
String foo = "abc";
if (!P.matcher(foo).matches())
如果您的代碼中只有一次這種情況,我會這樣做。 如果你有幾次,初始化一個常量集:
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)) {
...
}
正則表達式(理想情況下)或if / else阻止。 這是對Java正則表達式的溫和介紹:
在您的示例中,您可以使用HashSet來放置您想要比較的所有字符串。
然后你可以簡單地輸入
if (!foo.startsWith("ba") && !mySet.contains(foo)) {
//doSomething
}
有人可能會爭辯說,以下內容比原始代碼更“優雅”。
if (!foo.matches("^ba.*|^cab$|^bca$|^bbc$|^ccb$|^cca$")) {
// do something
}
我更喜歡原版,因為它最簡單,使用任何人都可以理解的自然語言,因此它更易於維護......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.