2012-06-23 5 views
0

Я пытаюсь сравнить две строки друг с другом. Один из них содержит, например:Сравнение значений в двух строках

String x =" aa bb cc dd ee " 

, а другой:

String y =" aa bb " 

Теперь я хочу, чтобы это сделать

if (any values from String x EXISTS IN String y) 

if (y.matches(???)){System.out.println("true");} 
else{System.out.println("false");} 

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

if (x.matches(".*"+y+".*")){do something} 

B ut Я хотел бы знать, есть ли способ проверить, соответствует ли какое-либо значение в String x String y.

+0

Если ваш код возвращает true, если 'x =" aa bb cc dd ee "и' y = ee aa'? – Makoto

ответ

2

Предполагая, что то, что вы называете «значением в строке», представляет собой пару символов между пробелами, разделите обе строки для их преобразования в наборах значений (Set<String>) и используйте методы Set для вычисления того, что вы хотите (containsAll() , removeAll(), retainAll(), и т.п.).

+0

Нет, это был просто пример. Я читаю данные из файла и не могу просто разбить –

+0

. Тогда объясните, что вы называете «значением». Но я не понимаю, как вы не можете составить набор слов из файла. –

+1

Я все еще думаю, что у вас должно быть только два набора и сравнить эти наборы. Единственное различие заключается в том, что вы должны использовать Date для представления Date, а не String. Кстати, вы только что приняли ответ, который делает именно то, что я предлагаю сделать в своем ответе (но в субоптимальном виде). –

1

Если вы пытаетесь увидеть, что String x находится в String y где-то, используйте метод .contains (String str).

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

+0

.contain не работает, потому что в sting x есть значения, которые не существуют в другом. –

+0

Вот почему я предложил расщепить x на части, разделенные пробелами, а затем использовать их на каждой из этих частей. Как пояснил JB Nizet в ответе ниже. –

1
String x_trimmed = x.trim(); 
String y_trimmed = y.trim(); 

String[] x_elements = x_trimmed.split("\\s+"); 
String[] y_elements = y_trimmed.split("\\s+"); 

Set<String> x_elementsSet = new HashSet<String>(Arrays.asList(x_elements)); 
Set<String> y_elementsSet = new HashSet<String>(Arrays.asList(y_elements)); 

for (String x : x_elementsSet) { 
    if (y_elementsSet.contains(x)) { 
     System.out.println("true"); 
    } else { 
     System.out.println("false"); 
    } 
} 
+0

Почему бы не использовать String.trim() для обрезки? Зачем использовать List вместо Set? Зачем преобразовывать массив в список на каждой итерации? –

+0

@ JBNizet: Верно! Большое спасибо за подсказку! :) – user278064

+0

Просто потому, что вы называете переменную xxxSet, она не делает ее Set. Используйте java.util.HashSet вместо java.util.List. Это намного эффективнее при поиске (O (1), а не O (n)). –

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