Java 如何扫描此行并使用scan.skip()?

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("

我有一个.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(" ; ");
        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);
}