2013-08-05 4 views
0

Возможно ли иметь несколько аргументов для .contains? Я ищу array, чтобы каждый string содержал один из нескольких символов. Я охотился по всему миру, но не нашел ничего полезного.Несколько аргументов для! Somearray.contains

 for(String s : fileContents) { 
      if(!s.contains(syntax1) && !s.contains(syntax2)) { 
       found.add(s); 
       } 
      }   

     for (String s : found) { 
      System.out.println(s);  // print array to cmd 
     JOptionPane.showMessageDialog(null, "Note: Syntax errors found."); 
      } 

Как это сделать с несколькими аргументами? Я также попробовал кучу || s самостоятельно, но это тоже не работает.

+0

Что такое синтаксис1? –

+1

Кроме того, во втором случае вы уверены, что это происходит не потому, что вас укушают проблемы с приоритетом оператора? –

+0

Каков тип 'syntax1'? –

ответ

1

Нет, он не может иметь несколько аргументов, но должен работать ||10.

!s.contains(syntax1+"") || !s.contains(syntax2+"") средства s не содержит syntax1 или не содержит syntax2.

Это только предположение, но вы можете захотеть s содержит одно из двух:

s.contains(syntax1+"") || s.contains(syntax2+"") 

или, может быть s содержит как:

s.contains(syntax1+"") && s.contains(syntax2+"") 

или, может быть s содержит ни одно из двух:

!s.contains(syntax1+"") && !s.contains(syntax2+"") 

Если синтаксис1 и синтаксис2 являются уже строки, вам не нужны +"".

Я считаю, что s.contains("") должен всегда возвращать true, чтобы вы могли его удалить.

+0

AHA! Теперь я вижу, что Vash говорит об операциях. Я уверен, что хочу «! S.contains (syntax1 +» ») &&! S.contains (syntax2 +" ")« Позвольте мне пройти тест. – InDeep

1

Похоже, что то, что вы описали, может быть сделано с помощью regular expression.

В правильном выражении Оператор | отмечает, что вам нужно соответствовать одному из нескольких вариантов.

Например, regex (a|b) означает a или b.
Регулярное выражение ".*(a|b).*" означает строку, содержащую a или b, а другую - то, что все - ОК (она предполагает одну строку строки, но при необходимости ее можно легко обрабатывать).

Пример кода:

String s = "abc"; 
    System.out.println(s.matches(".*(a|d).*")); 
    s = "abcd"; 
    System.out.println(s.matches(".*(a|d).*")); 
    s = "fgh"; 
    System.out.println(s.matches(".*(a|d).*")); 

Регулярные Exprsssions является мощным инструментом, который я рекомендую учиться. Посмотрите на this tutorial, это может оказаться полезным.

0

Существует не такая штука, как несколько.

Если вам требуется подтвердить, что список строк включен в какую-либо другую строку, вы должны выполнить итерацию по всем этим и проверить.

public static boolean containsAll(String input, String... items) { 

    if(input == null) throw new IllegalArgumentException("Input must not be null"); // We validate the input 


    if(input.length() == 0) { 
     return items.length == 0; // if empty contains nothing then true, else false 
    } 

    boolean result = true; 

    for(String item : items) { 
     result = result && input.contains(item); 
    } 

    return result; 
} 
+0

Я не думаю, что проверка 'if (input.length() == 0)' необходима. Он вернет то же самое без него. – Dukeling