使用next()和nextint()方法

1wnzp6jl  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(307)

我正在构建一个图表,列出排名、姓名、一个旧的统计数据、一个新的统计数据以及它们的变化(按顺序)。到目前为止我已经使用了这个代码

for (int rank = 0; rank < 5; rank++) {
    String name = scnr.next();
    int pop16 = scnr.nextInt();
    int pop11 = scnr.nextInt();
    canada.add(new Jurisdiction (name, pop16, pop11));
    System.out.printf(format1, rank+1, canada.get(rank).getName(), canada.get(rank).getPop16(), canada.get(rank).getPop16(), canada.get(rank).calculateChange());
}

然而,要找到前5个示例,当它试图读取一个包含多个单词的名称时,例如“西区”或“新英格兰”,它就会停止。我正试图弄清楚我是如何通过使用不同的方法解决这个问题的 next() 或者如果我能做些什么来解决我的问题。
在你问之前,我使用的文本文件是专门格式化的

stringName   intOldStat   intNewStat

所以使用 nextLine() 不是一个真正的选择。
我需要13个不同的名称和统计数据的示例作为参考。

cbjzeqam

cbjzeqam1#

好的,那么你的输入文件语法是。。。不幸的是。。。因为没有明显的方法知道 stringName 饰面和 intOldStat 开始。如果有选择,最好的解决方案是(imo)更改文件语法;e、 g.要使用空格以外的字段分隔符。。。这是模棱两可的。
(你想的更糟。有真正公认的地名,名称中有数字;e、 g.“1770年的城镇”)
那么如何应对呢?以下是一些想法:
使用 Scanner.hasInt() 循环并使用/重新组合地名的单词,直到得到一个数字(但是1770年失败了!)
读一整行,然后使用 String.split 分词。然后将数组中的最后两个单词作为“stat”值,并使用 Integer.parseInt .
读完整的一行并用 regex 与3个组件匹配的组。
或者疯狂地写一个解析器。。。

相关问题