尝试在将字符串数组转换为整数时捕获异常(已解决)

问题描述 投票:0回答:1

我有一个文本文档,其中包含由“|”表示的数字列表。 例如:

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”,我的输出将变成只有一行代码而不是数字列表。

感谢您的所有帮助,我想我找到了为什么我的代码出现第二个问题。你们帮助了第一个。

java try-catch indexoutofboundsexception numberformatexception
1个回答
2
投票

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
    }
}

在实际工作中,我会首先扫描文件,检查所有代码点,以验证所有字符是否只是数字、竖线或换行符。

© www.soinside.com 2019 - 2024. All rights reserved.