对于输入字符串“1”,Integer.parseInt无法转换为整数

时间:2015-04-14 18:43:56

标签: java

当我运行应用程序时,它会在控制台上返回错误代码。问题是我无法在此行上从字符串转换为int

int ogrNo=Integer.parseInt(row[0]);

这是我正在使用的方法:

public void OgrDosyaRead() {
    try {
        File file = new File("D:\\dosya.txt");

        BufferedReader buf = new BufferedReader(new FileReader(file));
        String line = null;
        while((line=buf.readLine())!= null) {
           String[] row = line.split(",");

           int No=Integer.parseInt(row[0]);
           String Name=row[1];
           String Surname=row[2];
           String lesson1=row[3];
           String lesson2=row[4];
           put(No,Name,Surname,lesson1,lesson2);

        }

          buf.close();

    } 
    catch (Exception error) {
        error.printStackTrace();
    }

}


public void put(int No,String Name,String Surname,String lesson1,Strşng lesson2) {

像这样的错误消息;

java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Ogrenciler.HashTable.OgrDosyaRead(HashTable.java:178)
at Ogrenciler.MainClass.main(MainClass.java:38)

我的文件dosya.txt看起来像这样:

1,Helen,Dobre,Lesson1,Lesson2

2 个答案:

答案 0 :(得分:2)

MCVE您的代码运行正常:

public static void main(final String[] args)
{
    final String data = "1,Helen,Dobre,Lesson1,Lesson2";
    final String[] row = data.split(",");
    final int c1 = Integer.parseInt(row[0]);
    System.out.println("c1 = " + c1);
}

输出:

c1 = 1

Garbage Out Garbage Out:

您的问题在您的数据中存在,可能隐藏在行的1,部分中某种类型的空格字符,或者文件使用与Java默认值不同的编码进行编码。

在您的行上运行以下内容:
System.out.println(String.format("%040x", new BigInteger(1, data.getBytes(Charset.defaultCharset()))));
这就是您给出的示例的输出:
312c48656c656e2c446f6272652c4c6573736f6e312c4c6573736f6e32
  

如果你得到不同的东西,那么很可能文件不是   使用与Charset.defaultCharset()相同的编码进行编码。您   必须找到文件实际编码的Charset,   这取决于用于创建.txt文件的应用程序。   如果它是Windows特定的东西,它可能是一些Windows   默认编码, Java默认值。

答案 1 :(得分:-1)

当我改变我的代码时:

int ogrNo = Integer.parseInt(row[0].replaceAll("[^0-9]", ""));

它现在有效。