2016-05-07 14 views
0

私は自分のクラスにテキストファイルを読み込んでいます。 if条件が満たされたときに特定のarrayListに追加したいと思います。現時点では、arrayListは上書きされ続け、私は理由を知らない。arrayListに追加する複数のif文java

呼び出し元のクラス:

public String PatternPDF (String s) throws IOException, ClassNotFoundException { 
     ArrayList<String>arr=new ArrayList<String>(); 
     for (String line : Files.readAllLines(Paths.get("Fields2Extract.txt"))){ 
      //System.out.println(line); 
      arr.add(line); 
     } 
     for (String pattern:arr){ 
      OrganisePDF(pattern,s); 
     } 
     return pattern; 
    } 

ArrayListクラス

public void OrganisePDF (String pattern,String s) { 
    ArrayList<String> Chicago =new ArrayList<String>(); 
    Pattern patternorganise = Pattern.compile(pattern); 
    Matcher matcherpatternorganise_pattern = patternorganise.matcher(s); 
    String h=""; 
      while (matcherpatternorganise_pattern.find()){ 
       h=matcherpatternorganise_pattern.group(0); 
       all.add(h); 
      } 


      for (String n:all){ 
       if(n.contains("something good")||n.contains("a load of buses")){ 
        n=n.replaceAll("\\n", "").trim(); 
        Chicago.add(n); 
         } 
      } 

    System.out.prinln("Chicago"+Chicago); 
} 

私は

Chicago[something good,a load of buses] 
ために望んでいるのに対してこれは私に

Chicago[something good] 
Chicago[a load of buses] 

を与えるここでは、コードです

+0

これは大きなコードの断片であり、ループの種類であり、ここにはプロブラム –

+0

コードを再現するのに必要な情報を入力してください。上のコードでは2行を生成して印刷することは不可能です。 Jacekが述べたように、これはループでネストされているため、シカゴが再初期化されているようです。 –

+0

以下のコメントを参照してください。ジェシックは答えとして主張する? –

答えて

0

正規表現の一致で結果を連結していないため、これが表示されています。

はシカゴリストに追加forループのStringBuilderにし、後に試合を追加するようなものを試してください:

StringBuilder sb = new StringBuilder(); 
for (String n:all){ 
    if(n.contains("something good")||n.contains("a load of buses")){ 
     n=n.replaceAll("\\n", "").trim(); 
     sb.append(n); 
    } 

} 
Chicago.add(sb.toString()); 
+0

同じ問題が発生します。これは改行の問題でしょうか?私はそれらをすべて取り除いたと思ったが、stringbuilderは多くの空の文字列を連結しているようだ - おそらく、ifが満足されていないがテキストがない行を追加するだろうか? –

+0

Hmm。クラスの別のメソッドのループから呼び出された可能性がありますか? –

+0

ArrayListsを呼び出すメソッドの外に置くことで修正しました。ループ内で呼び出されるメソッドawsとしてArrayListを再初期化していることが指摘されています。ありがとう –

0
list.add(1, object1) 
StringBuilder builder = new StringBuilder(); 
for (String n:all){ 
    if(n.contains("something good")||n.contains("a load of buses")){ 
     n=n.replaceAll("\\n", "").trim(); 
     builder.append(n); 
     Chicago.add(0,builder.toString()); //this will add the data to a specific position 
    } 
} 

私はあなたがこの奇妙なことをしたい理由を知らない、しかし、あなたが試すことができますこの方法では、chicago.add(0,ojec);は、呼び出されるたびにデータを所定の位置に追加します。

関連する問題