我有一个文本文档,其中包含由“|”表示的数字列表。 例如:
0|0|2
1|0|1
1|1|0
2|0|1
2|1|0
2|2|1
3|0|0
3|1|1
3|2|0
3|3|1
我正在生成这个代码,并且所有方法的底部都有一行额外的代码。我知道我将始终拥有这一行,并相应地编写了我的代码,在创建 int 数组时使用 -1 值。问题是当我编辑文件后有两行而不是一行时。除了进入文件删除额外的行之外,我希望代码能够忽略这个问题。 我当前的代码无需额外的行即可工作:
while(scc.hasNextLine()){
String[] temp = scc.nextLine().split("\\|");
for(int j = 0; j < 3; j++){
arr[points][j] = Integer.parseInt(temp[j]);
}
points++;
}
scc.close();
当底部只有一行时,此方法有效且没有例外。但是当有两个时,我会因为有一个没有整数的空行而出现“NumberFormatException”。
我无法分享我的所有代码,因为它非常大并且使用多个自定义函数。感谢您提供的任何帮助。
我尝试使用以下方法捕获异常:
while(scc.hasNextLine()){
String[] temp = scc.nextLine().split("\\|");
for(int j = 0; j < 3; j++){
try{
arr[points][j] = Integer.parseInt(temp[j]);
}
catch (NumberFormatException ignore){}
}
points++;
}
scc.close();
当忽略这两个值时,这会生成一个新的错误“ArrayIndexOutOfBoundsException”,我的输出将变成只有一行代码而不是数字列表。
感谢您的所有帮助,我想我找到了为什么我的代码出现第二个问题。你们帮助了第一个。
String.isEmpty
如果您只想忽略空白行,请检查该行的长度。
String line = scc.nextLine() ;
if ( ! line.isEmpty() ) { … }
Array.length
检查所有您的输入,包括每行传入文本中的字段数。
String line = scc.nextLine() ;
if ( ! line.isEmpty() )
{
String[] parts = line.split( "\\|" );
if ( parts.length == 3 )
{
… handle valid input
}
else
{
… handle faulty input
}
}
在实际工作中,我会首先扫描文件,检查所有代码点,以验证所有字符是否只是数字、竖线或换行符。