为什么我不能正确解析字符串数组?

时间:2013-03-21 00:22:23

标签: java arrays string parsing

我遇到了解析字符串的问题;我似乎无法找出为什么我的String Array的值不等于它们应该是什么!这可能看起来很奇怪,所以这里是代码的简化版本(应用程序要大得多,所以我只做了一个小程序来解释我的观点)

public class Test {

public static void main(String[] args) {

    String src = "beep zap derp flop";
    String delims = "[ ]+";
    String[] tokens = src.split(delims);

    if (tokens[0] == "beep") {
        System.out.println("you said beep!");
    } else {

               for (int i = 0; i < tokens.length; i++) {
                    System.err.println("'" + tokens[i] + "'");
               }
          }
     }
}

我的输出是

'beep'
'zap'
'derp'
'flop'

我知道令牌[0]发出哔哔声,但Java似乎没有注意到。有什么我做错了吗?

4 个答案:

答案 0 :(得分:7)

您永远不应该使用==运算符来比较Java中Strings的内容。与Objects Strings一起使用时,==运算符会比较引用的相等性。换句话说,如果两个引用都引用相同的对象,==将只返回true个对象。如果您有两个不同的 String个对象,那么即使内容相同,==也会返回false

使用String#equals比较Strings的内容。此方法将逐个字符地比较String个对象的内容,以确定内容是否相同。

答案 1 :(得分:1)

您应该使用.equals来比较字符串。

equals 方法检查字符串的实际内容,==运算符检查两个对象是否引用相同的实例。

String.equals(String other)

请参阅:http://blogs.adobe.com/cantrell/archives/2003/04/how_equals_work.html

答案 2 :(得分:1)

在Java中,您必须使用equals方法来比较两个字符串。例如,如果您想将String aString b进行比较,则可以说if (a.equals(b))==运算符检查两个字符串是否是对同一对象的引用。

答案 3 :(得分:0)

公共课测试 {

public static void main(String[] args)    {
String src = "beep zap derp flop";
String delims = "[ ]+";
String[] tokens = src.split(delims);

if ("beep".equals(tokens[0]))
{
    System.out.println("you said beep!");
} 
else
{

           for (int i = 0; i < tokens.length; i++) {
                System.err.println("'" + tokens[i] + "'");
           }
      }

}

}