2017-11-20 2 views
-3

編集:[これはうまくいく]最終的にこれが正しく機能するようになった後、プログラムを何度もテストした後、私はこの全体の問題を改善して他のユーザーが必要に応じてポストのコードスニペットを利用できますファイルからデータを操作して配列に格納する

私のプログラムは現在、.txtファイルの内容をスキャンし、バッファされたリーダーを使用して配列リストに格納します。しかし、区切り文字 ':'で内容を分割する必要がありました。配列リストを配列に変換して文字列に変換すると、文字列は '['と ']'で始まり、別の区切り文字 '、'を持つようになりました。

デリミタ ':'で分割するだけでなく、データを別の配列に再入力する前に、文字列から角括弧も削除する必要があります。

// setup the file reader and create a string to temporarily store the data. 
BufferedReader in = new BufferedReader(new FileReader(file_name)); 
String line_reader = null; 
ArrayList<String> content_list = new ArrayList<String>(); 

// use a while loop to retrieve the data from the txt file and store it into array list 
while((line_reader = in.readLine()) != null) 

     { 
     content_list.add(line_reader); 
     } 

内容から:

は、ここで配列リストにテキストファイルの内容をスキャン...私が最初に要求として2次元配列を使用することなく、何をしたか

ファーストです。 txtファイルは現在、配列リストに格納されています。私の例では、配列リストの名前はcontent_listです。

私は、文字列にその配列に私の配列リストを変換するために必要と:

String str_file_contents = null; 
String[] file_contents = new String[0]; 

// CONVERSION ARRAY LIST -> ARRAY 
file_contents = content_list.toArray(new String[0]); 

// CONVERSION ARRAY -> STRING 
str_file_contents = Arrays.toString(file_contents); 

私は基本的にそれをクリーンアップするために、文字列を操作するのに必要な、このステップの後、ここで私はそれをやった方法は次のとおりです。

str_file_contents = str_file_contents.replace("[",""); 
str_file_contents = str_file_contents.replace("]",""); 
str_file_contents = str_file_contents.trim(); 

// create a new array ready for the split & 'clean' content. 
String[] split_content = new String[0]; 

split_content = str_file_contents.split(",|:"); 

私は自分のプログラムをデバッグし、split_contentには先頭と末尾に空白が含まれていることを認識しました。誰もが不思議について

int split_length = split_content.length; 

    for(int i = 0; i < split_length; i++) 
    { 
     split_content[i] = split_content[i].replaceAll("^\\s+", ""); 
    } 
    for(int i = 0; i < split_length; i++) 
    { 
     split_content[i] = split_content[i].replaceAll("\\s+$", ""); 
    } 

、.txtファイルは、このようなデータが含まれています:私はこのソリューションを作成したので、私は再びそれをトリミングしようとしたが、それはうまくいきませんでした

  Firstname Lastname 
      test1 : 1000 : 200 
      test2 : 1300 : 200 
      test3 : 1600 : 210 

うまくいけば、これは人々を助けますこれまでのすべてのコメントには事前に感謝の意を表します。 Robert。

+1

これは上書きしたからです。 'content_split = string_array [i]です。split( ":" + ""); ' – Lino

+0

あなたの問題の解決策を見つけられたらうれしいです。ただし、実際の回答/解決策は、あなたの質問に編集してはいけません**。一般的には、質問*を明確にするために質問を編集するべきですが、質問内に答えを入れることはできません。問題を解決するために使用したコードを使用して独自の回答を作成し、それを受け入れる必要があります(システムでは、自分の回答を受け取る前に48時間の遅延が必要な場合があります)。自分で問題を解決したら、[自分の質問に答えることが奨励されます](// stackoverflow.com/help/self-answer)。 – Makyen

答えて

0

変更この行:

content_split = string_array[i].split(":"+" "); 

へ:

content_split = string_array[i].split("\\s*:\\s*"); 
System.out.println(content_split[0] + " " + content_split[1] + " " + content_split[2]);//assuming you have 2 colons every line. 

今、出力は次のようになります。

test1 1000 200 
test2 1300 200 
test3 1600 210 

あなたは私が持っているかもしれませんどのように多くの列がわからない場合は、以下を行うことができます:

content_split = string_array[i].split("\\s*:\\s*"); 
for(int i=0; i<content_split.length; i++) 
    System.out.print(content_split[i] + " "); 
System.out.println(); 
+0

コードブロックと非コードブロックの間に空白行を残す必要があります。 – Bernat

2
はこれにあなたのコードを変更

:あなたの分割コンテンツの2D配列であなたを残し

String[][] content_split = new String[string_array.length][]; // create 2d array 
for (int i=0; i<string_array.length; i++){ 
    content_split[i] = string_array[i].split(" : "); // store into array and split by different criteria 
} 

を。

関連する問題