2012-04-22 77 views
1

我正在過濾新行,但第一次它在第二個循環上工作,其失敗的line 2 filering。如何解決這個java.util.Scanner.next,拋出java.util.NoSuchElementException

例外:

run: 
a[line 1]l[0] 
Exception in thread "main" java.util.NoSuchElementException 
a[line 2]l[1] 
a[line 3]l[2] 
b[line 1]l[0] 
b[line 3]l[1] 
    at java.util.Scanner.throwFor(Scanner.java:855) 
    at java.util.Scanner.next(Scanner.java:1364) 
    at ui.Test.main(Test.java:82) 

代碼:

// a) Lines 
String a = "line 1\n\r" + 
      "line 2\n\r" + 
      "line 3\n\r";     
// b) Total length 
int len = 0;  
Scanner sc = new Scanner(a).useDelimiter("\r?\n\r|\\|"); 
while (sc.hasNext()) { 
    System.out.println("a[" + sc.next() + "]l[" + len + "]"); 
    len++; 
} 

// c) Prepare array 
String[] value; 
value = new String[len+1]; 
len = 0;  
sc = new Scanner(a).useDelimiter("\r?\n\r|\\|"); 
while (sc.hasNext()) { 
    System.out.println("b[" + sc.next() + "]l[" + len + "]"); 
    value[len] = sc.next(); 
    len++; 
} 

// d) Goal - use the value for JComboBox 
System.out.println(value); 
+1

僅供參考,'系統.out.println(value)'不會按照您的想法工作。如果你想打印數組,首先使用'Arrays.toString'。 – 2012-04-22 23:08:02

回答

2

你調用next兩次在第二循環中,調用它一次並存儲該值:

String val; 
while (sc.hasNext()) { 
    val=sc.next(); 
    System.out.println("b[" + val + "]l[" + len + "]"); 
    value[len] = val; 
    len++; 
} 
相關問題