对于两个相等的字符串,Equals()不返回true

时间:2017-05-09 12:13:05

标签: java string function character-encoding equals

我未能找到两个字符串不相等的原因。这是我的代码:

  public static void main(String[] args) {
       JTextArea jt=new JTextArea();
        jt.append("why \n me?"); //i set a test value to the JTextArea
        Document doc = jt.getDocument();
        Element root = doc.getDefaultRootElement();
        Element element = root.getElement(0); 
        int start = element.getStartOffset();
        int end = element.getEndOffset();
 //the code above is what i specifically need for my app, to bring a 
 //specific line from a JTextArea
        String s;
    try {
        s=doc.getText(start, end - start);
   System.out.print("s = "+s);

       if(s.equals("why")) //i expect equals() here to return true
        System.out.print("s equals "+s);
       else
        System.out.print("s is not equal to "+s);

    } catch (BadLocationException ex) {
        ex.getStackTrace();
    }         
 }

运行程序后得到的结果是:

 s = why 
 s is not equal to why

4 个答案:

答案 0 :(得分:1)

您的结果必须有空格,因为您在新行之前有空格

 s=doc.getText(start, end - start);

end包含\n之前的空格。你需要写

 s=doc.getText(start, (end -1) - start);

或者你可以在比较时修剪它,因为它只是空间。 请注意,如果你有其他字母以外的其他字母不适用。

答案 1 :(得分:1)

最可能的解释是s字符串实际上是"why "。注意空格字符。

实际上,如果你看一下你附加到JTextArea的字符串,那么"为什么"之后会有空格。在换行之前。

一般来说,当您显示字符串以进行调试时,最好在其周围显示引号,以便可以注意到任何前导或尾随空格。例如:

       System.out.println("s = '" + s + "'");

另一种可能的解释(虽然在这种情况下不太可能)是homoglyphs;即两个不同的Unicode代码点,它们以典型的字体相互看起来像

答案 2 :(得分:0)

如果您使用引人注目的方式将其打印出来:System.out.print("s = >>" + s +"<<");

你看到最后你已经包含了空白和换行符:

s = >>why 
<<s is not equal to why 

why \n不等于why 使用s = doc.getText(start, end - start).trim();它应该有用。

答案 3 :(得分:-1)

如果要比较两个字符串对象的内容,可以使用s.compareTo("why")==0