所以我试图用扫描仪读取文件。此文件包含有两个城镇的数据,它们之间的距离在每一行上跟随它们。像这样:
Ebor,盖勒(Guyra)90
我试图让每个城镇都成为个体,允许重复。这就是我到目前为止所做的:
// Create scanner for file for data
Scanner scanner = new Scanner(new File(file)).useDelimiter("(\\p{javaWhitespace}|\\.|,)+");
// First, count total number of elements in data set
int dataCount = 0;
while(scanner.hasNext())
{
System.out.print(scanner.next());
System.out.println();
dataCount++;
}
现在,该程序打印出每条信息,无论是城镇名称还是整数值。像这样:
Ebor
Guyra
90
我怎样才能做到这一点,每行都有这样的输出:
Ebor
Guyra
谢谢!
答案 0 :(得分:3)
假设格式良好的输入,只需将循环修改为:
while(scanner.hasNext())
{
System.out.print(scanner.next());
System.out.print(scanner.next());
System.out.println();
scanner.next();
dataCount += 3;
}
否则,如果输入格式不正确,请在每次hasNext()
通话前检查next()
是否需要在那里打破循环。
答案 1 :(得分:1)
以这种方式尝试:
Scanner scanner = new Scanner(new File(file));
int dataCount = 0;
while(scanner.hasNext())
{
String[] line = scanner.nextLine().split(",");
for(String e : line) {
if (!e.matches("-?\\d+")) System.out.println(e);;
}
System.out.println();
dataCount++;
}
}
我们将逐行进行,将其拆分为数组,并使用正则表达式检查它是否为整数。
-? stays for negative sign, could have none or one
\\d+ stays for one or more digits
示例输入:
Ebor,Guyra,90
Warsaw,Paris,1000
输出:
Ebor
Guyra
Warsaw
Paris
答案 2 :(得分:1)
我写了一个名为intParsable的方法:
public static boolean intParsable(String str)
{
int n = -1;
try
{
n = Integer.parseInt(str);
}
catch(Exception e) {}
return n != -1;
}
然后在你的while循环中我会:
String input = scanner.next();
if(!intParsable(input))
{
System.out.print(input);
System.out.println();
dataCount++;
}