2016-02-11 4 views
2

Я пытаюсь сравнить массив (строк) с регулярной строкой от ввода. Это возможно? У меня есть тестовый код, и это в основном только говоритМожно ли сравнить строку массива с обычной строкой?

incomparable types java.lang.string and java.lang.string[] 

Это мой тестовый код:

String[] yes = new String[5]; 
yes[0] = "yes"; 
yes[1] = "yeah"; 
yes[2] = "sure"; 
yes[3] = "yupp"; 
yes[4] = "okay"; 
System.out.println("Input"); 
String input = scan.next(); 
if ((input).equalsIgnoreCase(yes)) { 
    System.out.println("compared!"); 
} 

ответ

1

Вы должны указать, какой индекс в массиве, чтобы сверить его.

Все пять записей в массиве разные, и Java не знает, какой из них проверять.

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

+0

есть простой способ проверить все они вместе или были бы чем-то вроде строк if ((input) .equalsIgnoreCase (да [0,1,2,3,4])) { – thebestofu

+2

Это трехстрочный. 'for (String возможность: да)' 'if (input.equalsIgnoreCase (возможность))' 'System.out.println (« Сравнено! »);' –

2

Наиболее эффективным решением будет создание набора строк, а затем вызов set.contains, чтобы увидеть, присутствует ли входная строка в наборе. Пример кода:

HashSet<String> stringSet = new HashSet<String>(); 
    //All string are already lower case so no need of toLowerCase() here 
    stringSet.add("yes"); 
    stringSet.add("yeah"); 
    stringSet.add("sure"); 
    stringSet.add("yupp"); 
    stringSet.add("okay"); 
    System.out.println("Input"); 
    String input = scan.next(); 
    if (stringSet.contains(input.toLowerCase())) { 
     System.out.println("compared!"); 
    } 
+1

Вам необходимо преобразовать вход в нижний регистр для этого, чтобы Работа. Также он требует, чтобы строки в наборе были строчными (что здесь имеет место, но следует упомянуть ...). – fabian

+0

Предложения: 'Set stringSet = new HashSet ();' (код для интерфейса), затем: 'Collections.addAll (stringSet," yes "," yeah "," sure "," yupp "," okay "); '. – assylias

+0

Сравнение @fabian Сравнение строк чувствительно к регистру. Я добавил тестовый код для вас. Вы можете проверить это http://ideone.com/iJRNTN –

1

Я хотел бы использовать некоторую форму итерации к шагу через массив из одного элемента, в то время:

for (String compare : yes){ 
    if ((input).equalsIgnoreCase(compare)) { 
    System.out.println("compared!"); 
}} 

Или что-то вдоль этих линий после того, как вы прочитали на входе.

0

Предполагая, что значения в yes все строчные

String[] yes = new String[]{"yes", "yeah", "sure", "yupp", "okay"}; 
System.out.println("Input"); 
String input = scan.next(); 
if (Arrays.asList(yes).contains(input.toLowerCase())) { 
    System.out.println("compared!"); 
} 

или лямбды, не обращая внимания случае, как полагает Fabian в комментариях

String[] yes = new String[]{"yes", "yeah", "sure", "yupp", "okay"}; 
System.out.println("Input"); 
String input = scan.next(); 
if (Arrays.stream(yes).anyMatch(input::equalsIgnoreCase)) { 
    System.out.println("compared!"); 
} 
+1

'Arrays.stream (да) .anyMatch (input :: equalsIgnoreCase)' не будет требовать, чтобы массив 'yes' был все строчным. – fabian

+0

Спасибо, не передумал. Улучшен ответ. –

Смежные вопросы