簡體   English   中英

評估大量Java字符串比較條件的風格更優雅的方法是什么?

[英]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正則表達式的溫和介紹:

http://www.javamex.com/tutorials/regular_expressions/

在您的示例中,您可以使用HashSet來放置您想要比較的所有字符串。

然后你可以簡單地輸入

 if (!foo.startsWith("ba") && !mySet.contains(foo)) { 
    //doSomething
 }
  • 編輯:Dang ......我遲到了......別人打敗了我。 ;-)

有人可能會爭辯說,以下內容比原始代碼更“優雅”。

if (!foo.matches("^ba.*|^cab$|^bca$|^bbc$|^ccb$|^cca$")) {
  // do something
}

我更喜歡原版,因為它最簡單,使用任何人都可以理解的自然語言,因此它更易於維護......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM