2017-12-09 19 views
0

テキストファイルの解析に問題があります。のは、私は(すべての文字列がスペースで区切られており、1行目の後にすべての行のみ2つの文字列を含む)は、このような内容のテキストファイルを持っているとしましょう:テキストファイルの文字列をjavaで文字列で解析する

a b c d e 
a b 
c d 

私は一度に最初の行、1つの文字列を処理する必要があります。それは "a"(その後メソッドのためにaを使い、その後 "b"(メソッドのためにbを使う)などです。

これ以降、2行目と3行目を別の方法で処理する必要があります。行2を読み、eに変数 "a"を格納し、 "b"を処理して変数e2にbを格納します。次に、別の方法としてe1とe2を使用する必要があります。 1行目以降の行はすべて、私が説明したのと同じことをします。

私の問題は、私のコードは、行全体を読み込み、それを変数として保存することです。したがって、私はそれぞれの文字列を読んでいません。また、私は1行目の処理が終わった時点を知る方法を理解していません(1行目以降のすべての行に異なる方法を使用するため、これは重要です)。ここでは、私が持っているものです。

Scanner scan = new Scanner(new File(args[0])); 
     while(scan.hasNext()){ 
     String input = scan.nextLine(); 
     t.addV(input); 
     } 

     while(scan.hasNext()){ 
      String e1 = scan.next(); 
      String e2 = scan.next(); 
      t.addE(e1, e2); 
     } 

私は、これは非常に間違っている知っているが、私はちょうど私が1行目を読んで行われ、どのように私は、個々の文字列を読んでいましたよときに私が知っているだろうかを理解していますよ。

答えて

0

あなたは本当に近いです。

ステップ1:最初の行を取得し、個々の文字

String firstLine = scan.nextLine(); 

// splits the line into a letter array 
String[] letters = firstLine.split("\\s"); 

for(String letter: letters){ 
    // do your method 
} 

ステップ2のためのメソッドを呼び出す:2つの個々の文字を取得、文字に応じて、メソッドを呼び出す:

while(scan.hasNextLine()){ 
    String line = scan.nextLine(); 
    String[] lets = line.split("\\s"); 

    String e1 = lets[0]; 
    String e2 = lets[1]; 

    // do your methods with the individual letters 
} 

もちろん、scan.next()を使用して一度に1文字ずつ検索することはできますが、あなたが質問した方法では、文字がオンになっている場合は、メソッド呼び出しの知識が必要です。それで、私はまた、後続の行に1行に最大2文字があると仮定しました。

+0

ええ、私は間違って質問したかもしれませんが、行番号は一言で言う必要はありません。私が意味することは、1行目は常に同じメソッドで使用され、1行目以降の行は、同じ意味であれば1行目とは異なるメソッドで使用されるということです。 –

+0

1行目以降の行には2文字以上の可能性がありますか? @CodyG。 –

+0

あなたのソリューションは感謝しますが、感謝します! –

-1

は、私はあなたがのstring.Split(ストリング区切り文字)を使用し、ライン内の要素を取得するには、編集

行毎にファイル

try (BufferedReader reader = new BufferedReader(new FileReader(args[0]))) { 
     String firstLine = reader.readLine(); 
     //Process with the first line 
     String secondLine = reader.readLine(); 
     //Process with the second line 
    } catch (Exception ex) { 

    } 

を読み取るために、BufferedReaderを使用することをお勧めする方法。 このように:

String[] splittedElements = line.Split(" "); 
+0

これはOPの質問に全く答えません –