2012-11-03 100 views
0

我有一個打破我的想法的問題。我有一個txt文件,看起來像沒有 n的Java掃描儀分隔符 n

fiat,regata,15*renault,seiscientos,25* 

在我的代碼,我有這個

 Scanner sc=new Scanner(new File("coches.txt"); 
     sc.useDelimiter("[,*]"); 
     while(sc.hasNext()){ 
      marca=new StringBuffer(sc.next()); 
      modelo=new StringBuffer(sc.next()); 
      marca.setLength(10); 
      modelo.setLength(10); 
      edad=sc.nextInt(); 

      coche=new Coche(marca.toString(),modelo.toString(),edad); 
      coches.add(coche); 
     } 

這裏的問題是,雖然循環工作三次,所以第三次馬卡= \ n並以java.util.NoSuchElementException停止。那麼,如何使用我的分隔符來阻止最後一個循環*並避免它進入額外/有問題的時間?

我已經嘗試過的事情一樣

while(sc.next!="\n") 

我也triyed這並不起作用

sc.useDelimiter( 「[\ * \ n]」);

已解決!

我終於找到了解決方案,部分得益於user1542723的建議。該解決方案
是:

String linea; 
String [] registros,campos;  
File f=new File("coches.txt"); 
FileReader fr=new FileReader(f); 
BufferedReader br=new BufferedReader(fr);//ALL this need Try Catch that I'm not posting 

while((linea=br.readLine())!=null){ 
     registros=linea.split("\\*"); 
    } 
    for (int i = 0; i < registros.length; i++) { 
     campos=registros[i].split(","); 
     marca=campos[0]; 
     modelo=campos[1]; 
     edad=Integer.parseInt(campos[2]);//that's an Int, edad means Age 

     coche=new Coche(marca.toString(),modelo.toString(),edad); 
     coches.add(coche); 
    } 
} 

謝謝大家誰幫助了我。

回答

1

您可能想逃離你的正則表達式的明星:

sc.useDelimiter("[,\\*]");

因爲

"[,*]"意味着,零次或多次和"[,\\*]"意味着,*

+0

好吧,我這樣做,但我仍然有同樣的問題。 – MBRebaque

+0

夥計,它不工作 – MBRebaque

+0

如果你添加任何空格,該怎麼辦?像'sc.useDelimiter(「[,\\ * \\ s +]」);'? – jlordo

0

您可以使用String.split("\\*")首先在*處分割,然後每條記錄有1個數組條目,然後再次使用split(",")來獲得您現在具有的值。

例子:

String input = "fiat,regata,15*renault,seiscientos,25*"; 
String[] lines = input.split("\\*"); 
for(String subline : lines) { 
    String[] data = subline.split(","); 
    // Do something with data here 
    System.out.println(Arrays.toString(subline)); 
} 
+0

謝謝你的伴侶,你給了我線索。 – MBRebaque