2016-10-10 1 views
-1

と文字列の比較:私は後述のように私の問題を修正するためにいくつかの助けを必要とArrayListの文字列要素

私は名前のデータリストと配列リストを持っており、それが38 45 1 ah3wような要素を持っている、zj4e 32 4 45私はah3w 38 45 1のような文字列をarraylistでチェックするかどうかを比較したいと思います。主な問題は空白です。私はそれらを無視したいと思います。なぜなら、文字の間に複数の空白を持つ要素がarraylistにあることがあるからです。私はreplaceAllメソッドを使って以下のようなものを試してみましたが、動作しませんでした。最後に、私はarraylistを作成する前にすべての空白を削除しようとしたが、私は同じことを私の弦にもやったが、うまくいった。私はちょうどスペースを使わずにそれらを比較したいものを変更したくない。ここに私のコードの例である:ここで

String field = "ah3w 38 45 1" 
for(int a=0; a<datalist.size(); a++){ 
    if(datalist.get(a).replaceAll("\\s+","").contains(field.replaceAll("\\s+",""))){ 
     datalist.remove(a); 
    } 
} 

は同じことをやっているし、あなたが実行し、私がやろうとしていると私は何を取得していますかを見ることができます別のコードブロックです:

import java.util.ArrayList; 

public class ReplaceAllElementsOfArrayListExample { 

    public static void main(String[] args) { 

    ArrayList arrayList = new ArrayList(); 
    String field= "ah3w 38 45 1"; 

    arrayList.add("zj4e 32 4 45"); 
    arrayList.add("ah3w  38 45 1"); 
    arrayList.add("ab2 56 2 45"); 

    System.out.println("Before replacement, ArrayList contains : " + arrayList); 

    if(arrayList.get(1).replaceAll("\\s+","").contains(field.replaceAll("\\s+",""))){ 

    System.out.println("They are equal : " + arrayList);} 
    else{ 
     System.out.println("They are not equal : " + arrayList); 
    } 

    } 
} 
+0

Iの前)(トリミングしようとしたが、それdidnt仕事。 –

+0

私はデータを1つずつ取得し、以下のようなリストを追加するような配列リストを埋めました:data.trim(); datalist.add(data); –

+0

"時々、文字の間に複数の空白がある要素がarraylistにあります"。 'trim()'は、他の文字の間に複数の空白があるようなことを修正しないので、あなたはそれを考慮しないでおくことができます。 –

答えて

0

はこれを試してみてください:

ArrayList<String> arrayList = new ArrayList<String>(); 
     String field = "ah3w 38 45 1"; 

     arrayList.add("zj4e 32 4 45"); 
     arrayList.add("ah3w  38 45 1"); 
     arrayList.add("ab2 56 2 45"); 

     //solution 
     String fieldNoWhitespaces = field.replaceAll("\\s", ""); 

     for (String dataElement : arrayList) { 
      String arg = dataElement.replaceAll("\\s", ""); 
      if (fieldNoWhitespaces.equals(arg)) arrayList.remove(dataElement);  
     } 

     //just to check for correctness 
     for (String dataElement : arrayList) { 
      System.out.println(":::" + dataElement); 

      int count = 0; 
      for (int i = 0; i < dataElement.length(); i++) { 
       if (Character.isWhitespace(dataElement.charAt(i))) { 
        count++; 
       } 
      } 

     System.out.println(":::Whitespaces:::" + count); 
    } 

出力:

::: zj4e 32 4 45

:::の空白::: 6

::: AB2 56 2 45

:::の空白::: 3

+0

答えをいただきありがとうございます。私はこのコード部分を試してみました。しかし、私のコードに同じロジックを適用すると、私はこのエラーに気づいています。あなたはそれについて考えていますか? **互換性のないタイプ [javac] found:java.lang.Object [javac]必須:java.lang.String [javac] for(String dataElement:cmlist){** –

+0

ところで、私はjava.langを持っています。 *私のコードの上にあるライブラリ –

+1

あなたのコードの行をArrayListから変更したことに注意してください。arrayList = new ArrayList();配列リスト arrayList = new ArrayList ();したがって、arrayListにはStringが含まれています。また、forループは、リストcmlistの各要素はString型であるため、値がStringであることを明示的にarrayListに伝える必要があります。 – 0x44656e6e795279616e

関連する問題