2014-11-16 2 views
0

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

String one= "ROLEAWARDS ROLEMOVIES ROLENOMINATIONS"; 
String two = "ROLENOMINATIONS ROLEAWARDS ROLEMOVIES"; 
if(one.contains(two) || two.contains(one)) 
{ 
    System.out.println("Contains"); 
} 
else 
    System.out.println("Doesn't Contain"); 

Это мой код, и даже если один содержит два и два также содержит один, он всегда печатает, что строка одна не содержит строку два

+0

No String содержит другое в вашем случае. – Maroun

+1

Содержит средства «является подстрокой», один не содержит _not_, два и два не содержат _not_. –

+0

Почему вы думаете, что один содержит два или наоборот? – SMA

ответ

5

Вы могли бы сделать что-то вроде:

String one= "ROLEAWARDS ROLEMOVIES ROLENOMINATIONS"; 
String two = "ROLENOMINATIONS ROLEAWARDS ROLEMOVIES"; 
String oneArray[] = one.split("\\s+"); 
String twoArray[] = one.split("\\s+"); 
Arrays.sort(oneArray); 
Arrays.sort(twoArray); 
if(Arrays.equals(oneArray, twoArray)) 
{ 
    System.out.println("Contains"); 
} 
else 
    System.out.println("Doesn't Contain"); 
} 
2

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

Так,

String one= "ROLEAWARDS ROLEMOVIES ROLENOMINATIONS"; 
String two = "ROLENOMINATIONS ROLEAWARDS ROLEMOVIES"; 

String[] oneSplit = one.split(" "); 
String[] twoSplit = two.split(" "); 
boolean contains = false; 
for(int i = 0; i < oneSplit.length; i++) 
{ 
    for(int j = 0; j < twoSplit.length; j++) 
    { 
     if(oneSplit[i].contains(twoSplit[j]) 
     { 
      contains = true; 
      break; 
     } 
    } 
} 
if(contains) 
{ 
    System.out.println("Contains"); 
} 
else 
{ 
    System.out.println("Doesn't Contain"); 
} 
0

класс содержит() возвращает истину, если и только если эта строка содержит указанную последовательность значений полукокса. И в вашем коде последовательность символов в каждой строке отличается от другой, поэтому в вашем коде она возвращает false и печатает, что строка не содержит строку два. Главное здесь - последовательность символов в каждой строке.

0

.contains() функция не проверяет, имеют ли они общие слова или нет.
Это проверка, является ли ваша одна строка подмножеством других.
в вашем случае, если обе строки не Подмножество друг от друга

String one= "ROLEAWARDS ROLEMOVIES ROLENOMINATIONS"; 
    String two= "ROLEMOVIES"; 
    if(one.contains(two) || two.contains(one)) 
    { 
     System.out.println("Contains"); 
    } 
    else 
     System.out.println("Doesn't Contain"); 

Теперь он будет печатать «Содержит».

Plz прочитал here подробно о .contain()

0

те две строки не совпадают.

String one= "ROLEAWARDS ROLEMOVIES ROLENOMINATIONS"; 
String two = "ROLENOMINATIONS ROLEAWARDS ROLEMOVIES"; 
if(one.contains(two) || two.contains(one)) 
     one.contains(two) will be true if two is a subset of one 
     two.contains(one) will be true if one is a subset of two 

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

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