string.equals不适合我

时间:2012-12-20 06:10:31

标签: java html string parsing compare

这是代码的有用部分:

java.util.List<Element> elems = src.getAllElements();
Iterator it = elems.iterator();
Element el;
String key,value,date="",place="";
String [] data;
int k=0;
Segment content;
String contentstr;
String classname;

while(it.hasNext()){

    el = (Element)it.next();

    if(el.getName().equals("span"))
    {

            classname=el.getAttributeValue("class");
        if(classname.equals("edit_body"))
        {
            //java.util.List<Element> elemsinner = el.getChildElements();
            //Iterator itinner = elemsinner.iterator();


            content=el.getContent();

            contentstr=content.toString();


            if(true)
            {


                System.out.println("Done!");

                System.out.println(classname);

                System.out.println(contentstr);


            }
       }
    }

}

没有输出。但是,如果我删除它确实打印的if(classname.equals("edit_body"))条件(在其中一个迭代中):

Done!
edit_body
&quot;I honestly think it is better to be a failure at something you love than to be a success at something you hate.&quot;

无法获取bug部分......帮助!

我正在使用外部java库BTW进行html解析。

BTW在输出开始时有两个错误,在两种情况下都存在,无论有无条件:

Dec 20, 2012 11:53:11 AM net.htmlparser.jericho.LoggerProviderJava$JavaLogger error SEVERE: EndTag br at (r1992,c60,p94048) not recognised as type '/normal' because its name and closing delimiter are separated by characters other than white space 

Dec 20, 2012 11:53:11 AM net.htmlparser.jericho.LoggerProviderJava$JavaLogger error SEVERE: Encountered possible EndTag at (r1992,c60,p94048) whose content does not match a registered EndTagType 

希望不会导致错误

好的伙计们,请有人解释一下! “edit_body”.equals(el.getAttributeValue(“class”))工作!!

5 个答案:

答案 0 :(得分:9)

您的classname中似乎有前导尾随 空白

尝试使用: -

if(classname.trim().equals("edit_body"))

这会修剪两端的任何空格。

答案 1 :(得分:9)

我现在遇到了完全相同的问题。

我成功通过使用:SomeStringVar.replaceAll("\\P{Print}","");来解决它。

此命令删除变体中的所有Unicode字符(您无法看到的字符 - 字符串看起来相同,即使它们不相等)。

我在均衡中需要的每个变体上使用此命令,它也适用于我。

答案 2 :(得分:2)

首先,String.equals()没有被打破。它适用于百万的其他程序/程序员。这不是您的问题的原因(除非您或某人故意修改......并破坏了您的Java安装......)

那么为什么两个明显相等的字符串比较不相等呢?

  1. 字符串上可能有前导或尾随空白字符。
  2. 可能会嵌入非打印字符。
  3. 当您使用典型字体显示外观时,可能会有成对的Unicode字符,但实际上并不相同。例如,希腊语代码页包含拉丁语元音所代表的字符......但实际上是不同的代码,因此不相等。

答案 3 :(得分:0)

将代码更改为:

classname="edit_body"; //<- hardcode 

if(classname.equals("edit_body"))

如果代码现在输入if语句,那么当你使用原始的“classname = el.getAttributeValue(”class“);”时,字符串内容显然必须有所不同。 在这种情况下,循环遍历各个字符并进行比较以找出差异。

如果代码仍未输入if语句,则代码未编译且运行旧代码,或者java安装已损坏; - )

OR。

如果java就像.net(我不知道java) 将“el.getAttributeValue”键入为字符串? 如果它被输入为对象,那么if语句将不会输入,因为它们是同一个字符串的两个不同实例。

答案 4 :(得分:0)

equals()是String类的方法。因此,它可以使用双引号。

 if(someString.equals("something")) ✓
 if(someString.equals('something')) ×