如何在Java中计算两个字符串中的相互单词?

如何在Java中计算两个字符串中的相互单词?,java,arrays,string,Java,Arrays,String,假设我有两个字符串: 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 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; 
}
publicstaticintsameword(字符串s1,字符串s2){
int num=0;
字符串[]a=s1。拆分(“”);
字符串[]b=s2。拆分(“”);
对于(inti=0;i
正如jackarms所说,您使用==来比较应该使用.equals的字符串。看

试一试

int num=0;
字符串[]a=s1。拆分(“”);
字符串[]b=s2。拆分(“”);
for(int i=0;i
您使用==来比较字符串——您应该使用
.equals
在Java 8+中,我这样做的方式类似于
返回(int)Stream.of(a).过滤器(x->Stream.of(b).anyMatch(y->x.equals(y)).count()-或返回一个
long
并移除强制类型转换。我也更喜欢
\\s+
作为正则表达式(而不是
)。最后,不要使用
==
来比较
对象的值。
  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;