5

这是代码的有用部分:

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;

无法获取错误部分...帮助!

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

顺便说一句,输出开始时有两个错误,在两种情况下都存在,有或没有 if 条件:

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")) 工作!!

4

5 回答 5

15

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

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

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

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

于 2016-05-30T10:53:27.557 回答
12

看起来您. _ _ _classname

尝试使用这个: -

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

这将在末尾修剪任何这些空格。

于 2012-12-20T06:14:08.057 回答
2

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

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

  1. 字符串上可能有前导或尾随空白字符。
  2. 可能有嵌入的非打印字符。
  3. 当您使用典型字体显示它们时,可能会有一对 Unicode 字符看起来相同,但实际上并不相同。例如,希腊代码页包含看起来像拉丁元音的字符......但实际上是不同的代码,因此不相等。
于 2012-12-20T08:08:02.953 回答
0

将代码更改为:

classname="edit_body"; //<- hardcode 

if(classname.equals("edit_body"))

如果现在代码进入if语句,那么在使用原来的"classname=el.getAttributeValue("class");"时,字符串内容显然有一些不同。在这种情况下,循环遍历各个字符并比较它们以找出差异。

如果代码仍然没有进入 if 语句,要么您的代码没有编译并且您正在运行旧代码,或者您的 java 安装已损坏;-)

或者。

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

于 2012-12-20T08:27:39.057 回答
0

equals() 是 String 类的方法。因此,它适用于双引号。

 if(someString.equals("something")) ✓
 if(someString.equals('something')) ×
于 2020-06-03T07:39:09.553 回答