Java 如何扫描此行并使用scan.skip()?
我有一个.txt文件,其中包含以下格式的行示例:Java 如何扫描此行并使用scan.skip()?,java,skip,Java,Skip,我有一个.txt文件,其中包含以下格式的行示例:torch;3.0 ; 23.0 我想扫描它,以便将第一项放在字符串中,第二项和第三项放在浮点中 这是我到目前为止所做的,但是scan.skip(“;”)不起作用,我也尝试过scan.skip(Pattern.compile(“;”)但也不起作用 File file = new File(dir); try { Scanner scan = new Scanner(file); scan.skip("
torch;3.0 ; 23.0
我想扫描它,以便将第一项放在字符串中,第二项和第三项放在浮点中
这是我到目前为止所做的,但是scan.skip(“;”)
不起作用,我也尝试过scan.skip(Pattern.compile(“;”)
但也不起作用
File file = new File(dir);
try {
Scanner scan = new Scanner(file);
scan.skip(" ; ");
scan.useDelimiter(Pattern.compile(" ; "));
while (scan.hasNextLine()) {
String s = scan.next();
float f1 = scan.nextFloat();
float f2 = scan.nextFloat();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
你有什么解决办法吗?
谢谢请不要更改用于读取
文件的扫描仪的分隔符。相反,请实例化一个内部扫描仪
,以解析从文件中读取的行。同样,我会使用a来确保扫描仪
(和文件
)已关闭。例如
File file = new File(dir);
try (Scanner scan = new Scanner(file)) {
while (scan.hasNextLine()) {
Scanner lineScan = new Scanner(scan.nextLine());
lineScan.useDelimiter(Pattern.compile("\\s*;\\s*"));
String s = lineScan.next();
float f1 = lineScan.nextFloat();
float f2 = lineScan.nextFloat();
System.out.printf("%s %.2f %.2f%n", s, f1, f2);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
您可以使用;
或\n
作为分隔符,无需跳过,而且我建议使用Float.parseFloat(scan.next());
提供或将解决您的问题的答案
然而,我想解释为什么您的代码不工作,以及如何使其工作
在Scanner#skip(字符串模式)
文档中,它说:
如果在当前位置未找到与指定模式的匹配项,则不会跳过任何输入,并引发NosTouchElementException
因此,您的scan.skip(;”)
会阻塞线程,并继续读取令牌,直到您的输入与要跳过的指定模式(;
)匹配,或者抛出NoTouchElementException
)
如果要使用.skip(..)
,只需更改方法调用的顺序,如:
试试看{
扫描仪扫描=新扫描仪(文件);
while(scan.hasNextLine()){
字符串s=scan.next();
扫描。跳过(“;”);
float f1=scan.nextFloat();
扫描。跳过(“;”);
float f2=scan.nextFloat();
}
}
什么不起作用确切地说是什么意思?@Gatimelo-如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。已接受的答案有助于未来访问者自信地使用该解决方案。要将答案标记为已接受,您需要单击大复选标记(✓) 答案左边。您也可以查看以了解更多信息。请注意,对于一个问题,您只能接受一个答案。但是,如果您的声誉分数超过15分,您可以根据自己的意愿对任意多个答案进行投票。哦,好的,非常感谢您花时间解释
Scanner scan = new Scanner(file);
scan.useDelimiter(Pattern.compile("[;\\n]"));
while (scan.hasNextLine()) {
String s = scan.next();
float f1 = Float.parseFloat(scan.next());
float f2 = Float.parseFloat(scan.next());
System.out.println(s + " " + f1 + " " + f2);
}