2012-04-22 18 views
0

javaでテキストファイルを読み込む際に問題があります。各文字列と末尾の改行文字と刺さとint型の間に空白行を持つint型の値でJavaスキャナの問題

String 
String 
String 
String 

Int 
Int 
Int 
Int 

:テキストファイルは次の形式を持っています。各文字列の値を文字列配列に保存したいのですが、空白行でスキャナを停止させる方法を理解できません。私は、intがあるまで行く、hasNextの値が ""になるまで行ったり、文字列を読み込もうとしているのに何も動いていないなど、さまざまな方法を試みました。誰かがanyhelpを提供できますか?

+5

は、なぜあなただ​​けの行ずつ読んでいませんか? – Tudor

+4

あなたが今までに持っているコードを見せてください。また、おそらくすべての行を読んで、あなたが望まないものを無視する方が簡単でしょう。 – twain249

+0

私たちが多分それを修正できるように、あなたが試みたものを投稿してください。 –

答えて

3

わからないあなたは正確に4 String sおよび4 Integer s以上を持っているので、以下のようなものが動作する必要がある場合:

List<String> strings = new ArrayList<String>(); 
List<Integer> ints = new ArrayList<Integer>(); 

while(scanner.hasNext() && !scanner.hasNextInt()) { 
    strings.add(scanner.next()); 
} 
while(scanner.hasNextInt()) { // If you also want to store the ints 
    ints.add(scanner.nextInt()); 
} 
+0

私は正確な数値を持っていません。例の場合は4を使用しました。 –

+0

:) –

+0

この解決策は、単語ごとに 'string'リストに新しい要素を追加し、1行ではなく(' foo bar'は1行で2つの要素をリストに追加します)、文字列を整数として解析することができます(例えば、文字列が '5 apples'の場合は例外が発生します)。 – siegi

0
while (mScanner.hasNextLine()){ 
    String line = mScanner.nextLine(); 
    if (line.length() == 0) 
     break; 
    else 
     mArrayList.add(line);//do stuff 
} 
+0

これはもう少しうまくいくように見えましたが、値をarraylistに追加すると、最初の値が追加されました。 –

0
public static void main (String [] args) 
{ 
    Scanner sc = new Scanner (System.in); 
    int count = 0; 
    while (sc.hasNext()) 
    { 
     String s = sc.next(); 
     ++count; 
     System.out.println (count + ": " + s); 
     if (count == 4) 
      break; 
    } 
    while (sc.hasNext()) 
    { 
     int i = sc.nextInt(); 
     System.out.println (count + ": " + i); 
    } 
} 

猫のdat

Foo 

Bar 

Foobar 

Baz 

1 

2 

4 

8 

テスト: 猫DAT |私は、改行や空の改行のための特別な何もしない:あなたが見るように、私は、ファイル形式について若干異なる考えを持っていましたが、あなたが見る元の質問からJava ScanIt

1: Foo 
2: Bar 
3: Foobar 
4: Baz 
4: 1 
4: 2 
4: 4 
4: 8 

だから、プログラムもあなたのために働くはずです。あなたの例から