2017-01-07 10 views
-2

私はtxtファイルを持っており、配列のすべての要素(文字列、スペース)を配列に配置する必要があります。各行の要素をJavaの配列に配置する

例:

1行 "ヘイ、1日\ n" は最初の行のための

2 ///など

出力:[ "H" "E" "Y"」、 "" "" 1 "" d "" a "" y "]

これはどの方法で最適ですか?分割と文字列を使用するか、char型で操作していますか?

+5

あなたは 'string.toCharArray'を使用できません。 – Moira

+0

あなたは、行全体を文字列に入れて、この方法を使用することを意味しますか? – belab

+1

ファイルの読み込みに問題はありますか?または文字列の文字を取得するか? – Tunaki

答えて

2

文字列にString#toCharArrayを呼び出すだけではどうですか?

とにかくnextLineを使用すると、読者は改行を切り捨てます。

のような何か:

try(BufferedReader r = new BufferedReader(new FileReader("topSecretDocs.txt"))) { 
    for(String line = r.readLine(); line != null; line = r.readLine()) { 
     char[] chars = line.toCharArray(); 
     System.out.println("Split line to " + Arrays.toString(chars)); 
    } 
} catch(IOException e) { 
    dealWithException(); 
} 

編集:特に、非常に大きな文字列に対して、文字列をコピーする必要があるので、あなたが、代わりにString#charAtを使用して文字列をループしたいことがあり注意。

編集2:非常に悪いベンチマークです。

static long time(Runnable r) { 
    long start = System.nanoTime(); 
    r.run(); 
    return System.nanoTime() - start; 
} 

static int cs = 0; 

public static void main(String[] args) { 
    char[] bigString = new char[100000]; 
    Arrays.fill(bigString, 0, bigString.length/4, 'A'); 
    Arrays.fill(bigString, bigString.length/4, bigString.length/2, 'B'); 
    Arrays.fill(bigString, bigString.length/2, bigString.length * 3/4, 'C'); 
    Arrays.fill(bigString, bigString.length * 3/4, bigString.length, 'D'); 
    String s = new String(bigString); 
    float avgCopy = 0, avgLoop = 0; 
    final int times = 100000; 
    for(int i = 0; i < times; i++) { 
     avgLoop += time(() -> { 
      cs = 0; 
      for(int j = 0; j < s.length(); j++) 
       cs += s.charAt(j) == 'C' ? 1 : 0; 
     }); 
    } avgLoop /= times; 
    for(int i = 0; i < times; i++) { 
     avgCopy += time(() -> { 
      char[] chars = s.toCharArray(); 
      cs = 0; 
      for(char c : chars) 
       cs += c == 'C' ? 1 : 0; 
     }); 
    } avgCopy /= times; 
    System.out.println("copy: " + avgCopy + " ns"); 
    System.out.println("loop: " + avgLoop + " ns"); 
    System.out.println("There were (obviously) " + cs + " Cs in that string."); 
} 

は私が取得:

copy: 70984.336 ns 
loop: 40534.63 ns 

ので、約半分の速さ。あなたがそれを大きな違いと呼ぶかどうかに関わらず、私はあなたに任せます。

+0

ありがとう、私はそれを試してみよう! – belab

関連する問題