Java字符串匹配问题

3
我是一个有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我面临一个非常基本的问题。有时候一些小事情可能会占据你整个一天:( 但感谢stackoverflow成员们总是尽力帮助 :)

我正在尝试匹配2个字符串,如果它们匹配,应该返回TRUE

现在我正在使用这个

if (var1.indexOf(var2) >= 0) {
return true;
}

但是如果var1的值为“maintain”,var2的值为“inta”或“ain”等,它仍然返回true :(。 在Java中是否有一种可以进行完全文本匹配而不是部分匹配的方法? 例如
if("mango"=="mango"){
return true;
}

thanks ! ! !

4个回答

5
为什么不直接使用内置的String equals()方法呢?
return var1.equals(var2);

4
if( "mango".equals("mango") ) { 
   return true;
}

在Java中,除非你确实知道自己在做什么,否则不要使用`==`进行字符串比较。


1
== 是比较引用指向的内容,而在 String 的情况下 .equals 是按字典顺序比较字符串。在 Java 中,您可以创建两个具有相同内容的新字符串,但 == 将返回 false。在您编写的人为示例中,使用 == 很可能会正确运行,但如果您使用 new 运算符创建了两个字符串变量并将值设置为 mango,则不起作用。 - Amir Afghani
2
这里有一个非常粗略的比喻:var1 == var2 就像是在问两个人是否是同一个人,而 var1.equals(var2) 则像是在问两个人是否有相同的名字。 - hbw

3

在匹配字符串时,使用equalsequalsIgnoreCase方法来比较java.util.String类型的字符串。同时,您还需要检查要比较的对象是否为null。我通常会选择使用commons StringUtils来完成这些操作。它拥有非常好用的常见字符串操作工具。


1
这里有一个例子可以说明为什么==不是你想要的:
String s1 = new String("something");
String s2 = new String("something");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));

实际上,虽然s1s2包含相同的字符序列,但它们并不指向内存中的同一位置。因此,这将打印falsetrue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接