我正在构建一个图表,列出排名、姓名、一个旧的统计数据、一个新的统计数据以及它们的变化(按顺序)。到目前为止我已经使用了这个代码
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个不同的名称和统计数据的示例作为参考。
1条答案
按热度按时间cbjzeqam1#
好的,那么你的输入文件语法是。。。不幸的是。。。因为没有明显的方法知道
stringName
饰面和intOldStat
开始。如果有选择,最好的解决方案是(imo)更改文件语法;e、 g.要使用空格以外的字段分隔符。。。这是模棱两可的。(你想的更糟。有真正公认的地名,名称中有数字;e、 g.“1770年的城镇”)
那么如何应对呢?以下是一些想法:
使用
Scanner.hasInt()
循环并使用/重新组合地名的单词,直到得到一个数字(但是1770年失败了!)读一整行,然后使用
String.split
分词。然后将数组中的最后两个单词作为“stat”值,并使用Integer.parseInt
.读完整的一行并用
regex
与3个组件匹配的组。或者疯狂地写一个解析器。。。