gpt4 book ai didi

Java 扫描器分隔符不带\n

转载 作者:行者123 更新时间:2023-12-01 15:04:08 24 4
gpt4 key购买 nike

有一个问题让我心烦意乱。我有一个 .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]");

解决了!!!

我终于找到了解决方案,部分感谢用户1542723的建议。解决办法
是:

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

感谢所有帮助过我的人。

最佳答案

您可能想转义正则表达式中的星号:

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

因为

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

关于Java 扫描器分隔符不带\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com