2016-11-17 3 views
0

Скажем, у меня есть две строки:Как считать взаимные слова в 2 строках в Java?

String s1 = "My name is Alex." 

String s2 = "My name is Nick." 

Я хочу программу для подсчета взаимных слов и возвращает значение. С этими строками возвращаемое значение будет равно 3, из-за трех слов, которые имеют общий характер: my, name, is. По какой-то причине, в моей программе, значение Num возвращается всегда 0.

public static int sameWord(String s1, String s2) { 

    int num = 0; 
    String[] a = s1.split(" "); 
    String[] b = s2.split(" "); 

    for (int i = 0; i < a.length; i++) { 
     for (int j = 0; j < b.length; j++) { 
      if (a[i] == b[j]) { 
       num++; 
      } 
     } 
    } 

    return num; 
} 
+2

Вы используете == для сравнения строк - вы должны использовать '.equals' – jackarms

+1

Как я хотел бы сделать это в Java 8+, что-то вроде' возврата (межд) Stream.of (a) .filter (x -> Stream.of (b) .anyMatch (y -> x.equals (y))). Count(); '- или возвращает' long' и удаляет листинг , Я также предпочел бы '\\ s +' как регулярное выражение (над '' ''). Наконец, не используйте '==' для сравнения значений «Object». –

ответ

-1

Как jackarms сказал, вы используете == для сравнения строк, где вы должны использовать .equals. См. this.

Попробуйте

int num = 0; 
    String[] a = s1.split(" "); 
    String[] b = s2.split(" "); 

    for (int i = 0; i < a.length; i++) { 
     for (int j = 0; j < b.length; j++) { 
      if (a[i].equals(b[j])) { 
       num++; 
      } 
     } 
    } 

    return num;