2012-04-22 80 views
0

我在使用java讀取文本文件時遇到問題。文本文件的格式如下:Java掃描器問題

String 
String 
String 
String 

Int 
Int 
Int 
Int 

隨着每個String並且具有在端部一個新行字符,並在刺和整數之間的空行int值。我想將每個字符串值保存到一個字符串數組中,但我無法弄清楚如何讓掃描器停在空行。我嘗試了各種方法,比如直到有一個int,直到hasNext的值爲「」,並試圖讀取字符串,但沒有任何工作。有人可以提供幫助嗎?

+5

爲什麼你不只是讀行? – Tudor 2012-04-22 15:17:08

+4

顯示我們迄今爲止的代碼。也可能會更容易閱讀所有的行,然後忽略你不想要的行。 – twain249 2012-04-22 15:17:19

+0

請發佈您嘗試過的內容,以便我們可以修復它。 – 2012-04-22 15:17:22

回答

3

不知道從你的例子,如果你恰好有4 String秒和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作爲示例 – 2012-04-22 15:38:38

+0

好的,但是這應該仍然工作:) – 2012-04-22 15:39:55

+0

請注意,此解決方案確實在每個單詞的「strings」列表中添加了一個新元素,而不是每行(在一行中的「foo bar」會將兩個元素添加到列表中),並且如果其中一個字符串可以被解析爲整數(例如,如果字符串行是「5個蘋果」,則會發生異常)。 – siegi 2012-04-22 16:01:21

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

這似乎工作更好一點,但是當我將值添加到數組列表時,它只添加第一個值 – 2012-04-22 15:33:21

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 

從原來的問題我有,你看,有關文件格式稍有不同的想法,但你看:我沒有做什麼特別的新行或空換行符。

所以這個程序也適合你。