2016-04-12 5 views
0

テキストファイルの各行を分割して配列リストに挿入しようとしています。2次配列を主キーでソート

aa 04 cc ff gg rrr 
aa 01 bb dd ee fff 
aa 03 ff hh ee ttt 
aa 05 dd ss ww ccc 

1、数字を整数で格納する方法は、配列リストの文字列です。 (現在のコードで数値書式エラーを投げる)。

2、Javaコレクションを使用して配列に挿入するときに、整数に基づいてソートすることはできますか?

これまでのところ、私が持っている、

List <Object> records = new ArrayList<Object>(); 
     bf = new BufferedReader(new FileReader(getFile())); 
     String readLine;   

     while ((readLine = bf.readLine()) != null) { 
      try { 
        List <Object> record = new ArrayList<Object>(); 

        record.add(readLine.substring(flg_start, num_start).trim()); 
        record.add(Integer.parseInt(readLine.substring(num_start-1, fld_start-1).trim())); // converting string to int and saving to record list, throwing Number Format Error. 

は、私は再び私の質問を言い換えるてみましょう、 はどのように私は、文字列として整数と残りとして記録[1]を設定することができますか? 配列に追加するときに並べ替えるために使用できるコレクションフレームワークは何ですか? 私はあなたがこのように行うことができますし、forループを使用することができますまたは使用の正規表現[0することができStrArrayとにアクセスするために周りの1M記録

aa 01 bb dd ee fff 
aa 03 ff hh ee ttt 
aa 04 cc ff gg rrr 
aa 05 dd ss ww ccc 
+0

いくつかの要件といくつかのコードを掲載しましたが、実際の問題や疑問について教えてくれませんでした。 – tnw

+0

インデックスの問題が疑われます。部分文字列の結果を別々の変数に格納し、(ロギングまたはデバッガを使用して)それらをチェックしてみてください。 –

+0

@ tnw、私のコードの下でもう一度質問を更新しました – SamK

答えて

1

あなたはIntegerキーとList値でTreeMapを必要とするように見えます。ファイルを読んで@HaridwarJhaが記述されているように各行を解析し、各行に対して解析された値で構成されたIntegerキーとList値で新しい値を入れてください。 TreeMapを使用すると、データはキーによって並べ替えられます。つまり、Integer個の値がファイルからソートされます。

Map<Integer, List<Object>> map = new TreeMap<Integer, List<Object>>(); 
while((line=reader.readLine())!=null){ 
    List<Object> row = new ArrayList<>(); 
    String[] strArray=line.split(" "); 
    row.add(strArray[0]); 
    row.add(strArray[1]); 
    row.add(strArray[2]); 
    row.add(strArray[3]); 
    row.add(strArray[4]); 
    row.add(strArray[5]); 
    map.put(new Integer(row.get(1)), row); 
} 
+0

私はTreemapを使って自動ソートを考えていました。配列に挿入する場合は、このファイルには100万行が含まれているため、パフォーマンス上の理由で良い考えですか? – SamK

+0

あるいは、私はTreemapを変数のクラスで定義していますか? – SamK

+0

2D TreeMapを使用して任意の擬似コードをソートするには? – SamK

0

のソートされたリストとして、私の配列の最終的な結果を期待しています... 1 ]構文解析のために.... ここには単純なものがあります...試してみてください public static void main(String [] args){ リストレコード=新しいArrayList();データ構造については

File file=new File("File Location"); 
    try { 
     BufferedReader reader=new BufferedReader(new FileReader(file)); 
     String line; 
     while((line=reader.readLine())!=null){ 
      String[] strArray=line.split(" "); 
      records.add(new Integer(strArray[1])); 
      records.add(new String(strArray[0])); 
      records.add(new String(strArray[2])); 
      records.add(new String(strArray[3])); 
      records.add(new String(strArray[4])); 
      records.add(new String(strArray[5])); 
     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    for(Object tmp:records){ 
     System.out.println(tmp); 
    } 
} 
関連する問題