微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何扫描此行并使用scan.skip?

我有一个.txt文件,其中包含以下格式的行:eet2$X

我想对其进行扫描,以便将第一项放置在字符串中,将第二项和第三项放置在浮点数中。

这是我到目前为止所做的,但是torch ; 3.0 ; 23.0不起作用,我也尝试过scan.skip(" ; "),但是也没有起作用。

scan.skip(Pattern.compile(" ; ")

您对我有什么解决方案吗? 谢谢

解决方法

请勿更改用于读取Scanner的{​​{1}}的分隔符。而是实例化一个内部File来解析您从文件中读取的行。另外,我将使用try-with-Resources来确保Scanner(和Scanner)处于关闭状态。喜欢,

File
,

您可以使用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());
,

提供herehere的答案将解决您的问题。

但是,我想解释为什么您的代码不起作用,以及如何使它起作用。

Scanner#skip(String pattern)文档中的

Have a look,内容为:

如果在当前位置找不到与指定模式的匹配项,则不跳过任何输入,并引发NoSuchElementException。

因此,您的scan.skip(" ; ");阻塞线程,并继续读取令牌,直到您的输入匹配要跳过的指定模式(;)或{{1 }}被抛出。

如果要使用NoSuchElementException,则只需更改方法调用的顺序即可,例如:

.skip(..)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。