Java - for-loop不将所有元素添加到列表中

时间:2016-02-24 14:48:13

标签: java parsing for-loop

我目前正在编写一个Java程序,用特殊的标记语言解析文本内容并执行以下操作:

  • 选择具体内容,例如定义
  • 删除特殊语法以获得更干净的文本输出

我已经在我的代码中忙于for循环了几天,我找不到问题:我的for循环将列表的第一个元素再次添加到第二个,我不明白我的代码在哪里导致对那种虫子。这段代码是“修复”几个NullPointerExceptions的结果,它不是很漂亮,我希望你们中的一些人能够阅读并给我一个关于我的错误的提示:

//we want to use the advantages of both ArrayList and String Array so we will work with both types
    List<String> temp = new ArrayList<String>();
    for (String line : dr.getAllLines()){
        temp.add(line);
    }
    String[] tempArray= new String[temp.size()];
    temp.toArray(tempArray); //fill the array with the contents of the temp list

    for (int i=0; i<temp.size(); i++){//this for loop goes through the lines looking for our pattern

        //define this pattern :
        Pattern patternS = Pattern.compile("^=== (.+) ==="); //new entry is always characterized by this regex
        Matcher matcherS = patternS.matcher(tempArray[i]);

        if (matcherS.find()){ //if current line matches pattern

            for(int ii=i+1; ii<temp.size(); ii++){ //this for loop adds content to our Eintraege list (because we found the pattern)

                //clean up current line (i)
                tempArray[ii-1]=tempArray[ii-1].replaceAll("[^a-zA-ZßüöäÜÖÄ|\\s+]", "");

                //add current line (i) to temporary Eintrag_lines String
                Eintrag_lines=Eintrag_lines + "\n" + tempArray[ii-1]; 

                //define again pattern (for next entry)
                Pattern patternStop = Pattern.compile("^=== (.+) ===");
                Matcher MatcherSTOP = patternStop.matcher(temp.get(ii)); //look at next line (ii)

                if(MatcherSTOP.find()){//if we find the line corresponding to the next Eintrag

                    //Eintraege is a list of all entries for one word (one element=one entry)
                    Eintraege.add(Eintrag_lines); 

                    Eintrag_lines = ""; //clear current entry String
                    break;//stop adding to our Eintraege list and go back to 
                }

            } //this for-loop adds lines for 1 entry until it finds the first line of the next entry (MatcherSTOP)
        }   else {
            continue;
        }
    }

    return Eintraege;
}

//method
public String getSpecificEintrag(int inputNumber){ //input "1" : first element of list
    parseEintraege();
    for (int i=0;i<Eintraege.size();i++){
        System.out.println(i + Eintraege.get(i) + "\n next : \n");
    }


    //try{
    //  System.out.println(Eintraege.get(inputNumber-1));
    //  return Eintraege.get(inputNumber-1);
    //} catch (IndexOutOfBoundsException e){
    //  System.err.println("IndexOutOfBoundsException : try a smaller number for the entry");
    //}
    return "";
}

初始文本文件是德语单词“Ton”的维基词典,大致以这种方式构建:

== Ton ({{Sprache|Deutsch}}) ==

=== {{Wortart|Substantiv|Deutsch}}, {{m}} ===

----------content, definitions, examples, ...------------------

=== {{Wortart|Substantiv|Deutsch}}, {{m}} ===

----------more content, ... -----------------------------------

这就是我得到的:

0
 Wortart|Substantiv|Deutsch m 

Deutsch Substantiv Übersicht
|Genusm
|Nominativ SingularTon
|Genitiv SingularTons
|Genitiv SingularTones
|Genitiv PluralTone
|Dativ SingularTon
|Dativ SingularTone
|Dativ PluralTonen
|Akkusativ SingularTon
|Akkusativ PluralTone


Worttrennung
Ton Pl Tone

Aussprache
IPA Lautschrift|ton Pl Lautschrift|ton
Hörbeispiele Audio|DeTonogg Pl Audio|DeTöneogg|Tone
Reime Reim|on|Deutsch

Bedeutungen
 feinkörniges Verwitterungsprodukt Bodenart Töpfermaterial

Herkunft
Durch Verdumpfung von  zu  aus dem frühneuhochdeutschen tahen than welches wiederum aus dem spätmittelhochdeutschen dhe the Genitiv dhen then Lehm althochdeutsch thha Ton Lehm Töpfererde irdenes Gefäß hervorgegangenen war Belegt seit der Zeit um  Verwandt sind das mittelniederdeutsche d das altenglische  he und gotisch h Ton Lehm Allen zugrunde liegt des protogermanische germ anhn beim Trocknen schrumpfende dichter werdende Erde Während die frühen Formen noch feminin waren fand ein Genuswechsel zum maskulinen Genus wohl in Anlehnung an Lehm statt refLiteratur|AutorWolfgang Pfeifer Leitung|TitelEtymologisches Wörterbuch des Deutschen|Auflage durchgesehene und erweiterte|VerlagDeutscher Taschenbuch Verlag|OrtMünchen|Jahr|ISBN Stichwort supsupTonref

Synonyme
 Lehm Mergel

Beispiele
 Der Boden hier besteht zum größten Teil aus Ton

Wortbildungen
 tönern Tonerde Tonpfeife Tontaube

 Übersetzungen 
ÜTabelle|Ülinks
en  Ü|en|clay
fr  Ü|fr|argile f
it  Ü|it|argilla f
ca  Ü|ca|argila f
pl  Ü|pl|glina f  Ü|pl|i m
pt  Ü|pt|argila f
|Ürechts
ro  Ü|ro|lut
ru  Üt|ru||
sv  Ü|sv|lera
es  Ü|es|arcilla f
hu  Ü|hu|agyag


Referenzen
 Wikipedia|Ton
 RefDWDS|Ton
 RefDuden|TonSediment|Ton Sediment
 RefCanoo|Ton
 RefUniLeipzig|Ton

Quellen



 next : 

所以我只得到第一个条目。也许错误是非常愚蠢和简单,但我只是看不到它。

非常感谢你,感谢很长的帖子!

P.S。 :如果你需要翻译一些德语单词或变量名,请告诉我。

1 个答案:

答案 0 :(得分:0)

我将粗略概述我为简化/改进事物所做的工作,扩展我的评论:

<xsl:template match="my:customTag">
  <xsl:copy-of select="my:customFunc(@items,@classname)" />
</xsl:template>

正如您所看到的,您的代码存在一些差异:

  • 无需任何其他列表或数组。
  • 模式只编译一次(不需要多次编译)。
  • 无需查看接下来的内容,只需根据当前行做出反应。