我正在为一所学校的项目工作,并且遇到了一部分问题。我在记事本中有一个文本文件,其中包含有关NHL中每个团队的数据:
Washington Capitals
3.02
2.33
85.2
30.6
28.4
True
Dallas Stars
3.23
2.78
82.3
32.0
28.9
True
...
我试图将所有双打放在数组中,但我似乎无法弄清楚如何跳过包含字符串或布尔值的所有行。
这是我到目前为止的代码:
double data[][] = new double[30][6];
int indexRow = 0, indexCol = 0, tracker = 0;
File file = new File(fileName);
Scanner input = new Scanner(file);
while(input.hasNext())
{
if(tracker == 0 || tracker == 6)
{
//skip line
if(tracker == 6)
tracker = 0;
}
data[indexRow][indexCol] = input.nextDouble();
if(indexCol < 6) indexCol++;
if(indexRow < 30 && indexCol % 6 == 0)
{
indexRow++;
indexCol = 0;
}
tracker++;
}
反正是否只跳过包含字符串和布尔值的行?提前谢谢。
答案 0 :(得分:1)
你可以这样试试......
try {
double d = Double.valueOf(currentLine);
// is double
} catch(NumberFormatException e) {
// isn't
}
答案 1 :(得分:0)
你不能跳过一行,因为你需要首先阅读它,看看它是你想要的一条线还是一条线要扔掉。使用您提供的格式,只需读取该行的第一个字符,如果第一个字符是字母,则丢弃该行的其余部分。如果第一个字符是数字,则保留该行。
答案 2 :(得分:0)
由于答案已被接受,我不打算提供解决方案,但我想的越多,我就越感到被迫这样做。我在接受的答案中看到的问题是,它对输入数据进行了假设,为运行时异常留下了大门。 OOP的重点是创建健壮,可重用的代码,并为刚刚学习灌输不良实践IMO的人提供这种有限范围的解决方案。
我想到的一个解决方案是使用正则表达式检查字符串是否为数字:
public static boolean isNumeric (String s)
{
return s.matches("[+-]?\\d*\\.?\\d*");
}
(注意:根据数值的范围,您可能需要修改正则表达式以允许使用逗号)
作为检查以确保一切正常:
public static void main (String[] args) {
String[] nhlData = { "Washington Capitals",
"3.02",
"2.33",
"85.2",
"30.6",
"28.4",
"True",
"Dallas Stars",
"3.23",
"2.78",
"82.3",
"32.0",
"28.9",
"True",
"0",
"-5.",
"+100"};
for (String s : nhlData) {
System.out.print(s);
if (isNumeric(s)) {
System.out.println(" is numeric");
} else {
System.out.println(" is not numeric");
}
}
}
另一种解决方案是利用第三方库(如Apache Commons的强大功能,该库具有包含此功能的静态方法:请参阅StringUtils.IsNumeric()