Что является более стилистически элегантным способом оценки большого количества условий сравнения строк Java? - PullRequest
2 голосов
/ 29 августа 2011

Я написал следующую операцию сравнения строк для функции в моем приложении.

Но я ненавижу то, как это выглядит и насколько громоздко это выглядит.

String foo = "abc";

if(!foo.startsWith("ba") && 
    !foo.equals("cab") && 
    !foo.equals("bca") && 
    !foo.equals("bbc") && 
    !foo.equals("ccb") && 
    !foo.equals("cca"))
{
    // do something
}

Есть ли ещеэлегантный и, возможно, более удобный способ написать что-то вроде этого?

Ответы [ 5 ]

7 голосов
/ 29 августа 2011

Вы можете использовать регулярное выражение.

private static final Pattern P = Pattern.compile(
                                 "(ba.*|cab|bca|bbc|ccb|cca)");

String foo = "abc";
if (!P.matcher(foo).matches())
6 голосов
/ 29 августа 2011

Если у вас есть только одно условие в вашем коде, я бы позволил этому так. Если у вас есть это несколько раз, инициализируйте набор констант:

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)) {
    ...
}
0 голосов
/ 29 августа 2011

Можно утверждать, что что-то вроде следующего более «элегантно», чем ваш оригинальный код.

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

Я предпочитаю оригинал, так как он самый простой, использует естественный язык, понятный любому, и, следовательно, его удобнее поддерживать

0 голосов
/ 29 августа 2011

В вашем примере вы можете использовать HashSet, чтобы поместить все строки, которые вы хотите сравнить.

Затем вы можете просто набрать

 if (!foo.startsWith("ba") && !mySet.contains(foo)) { 
    //doSomething
 }
  • Edit: Dang ..Я опоздал ... кто-то другой избил меня.; -)
0 голосов
/ 29 августа 2011

Regex (в идеале) или блок if / else.Вот небольшое введение в регулярные выражения Java:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...