没有\ n的Java Scanner分隔符

时间:2012-11-03 14:49:30

标签: java java.util.scanner delimiter

我有一个让我心烦意乱的问题。我有一个看起来像

的.txt文件
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);
        }

这里的问题是While循环工作了三次,所以第三次marca = \ n并且它以java.util.NoSuchElementException停止。那么,我如何使用我的分隔符来阻止最后一个循环*并避免它进入额外/有问题的时间?

我已经尝试过像

这样的事情了
while(sc.next!="\n")

我也对此进行了调查并且无法正常工作

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);
    }
}

谢谢所有帮助过我的人。

2 个答案:

答案 0 :(得分:1)

你可能想逃脱正则表达式中的明星:

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

因为

"[,*]"表示,次或多次,"[,\\*]"表示,*

答案 1 :(得分: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));
}