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"))と、(反復の 1 つで) 印刷されます。

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;

バグの部分を取得できません...助けてください!

HTMLの解析に外部JavaライブラリBTWを使用しています。

ところで、出力の開始時に 2 つのエラーがあります。これは、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

12

の先頭または末尾に 空白があるようですclassname

これを使ってみてください: -

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

これにより、末尾の空白が削除されます。

于 2012-12-20T06:14:08.057 に答える
2

まず、String.equals()壊れていません。それは他の何百万ものプログラム/プログラマーのために働きます。これはあなたの問題の原因ではありません(あなたまたは誰かが故意に変更して...そしてあなたのJavaインストールを壊していない限り...)

では、なぜ2つの明らかに等しい文字列を等しくないと比較できるのでしょうか。

  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 ステートメントは入力されません。これらは同じ文字列の 2 つの異なるインスタンスであるためです。

于 2012-12-20T08:27:39.057 に答える