无法将String更改为Integer,因为负号后跟数字

时间:2015-09-14 14:03:50

标签: java string integer

我正在使用Java读取CSV文件并使用给定的项目进行一些数据分析。我读到的几个数据点是一堆不同的数字,范围从-999到999.我想将这些数字相互比较,所以我首先将String转换为整数。 我得到的问题是CSV文件使用数字(1-)后面的负号保存负数。这会抛出NullFormatException。我觉得有一个简单的方法,我忽略了。任何帮助都会很棒。

随机数据是{1,19-,20-,7,8}我需要{1,-19,-20,7,8}

int[] nnaOH = new int[x];
int[] nwOH = new int[x];
int[] nuaOH = new int[x];
for (int z = 1; z < x; z++){
    nnaOH[z] = Integer.parseInt(naOH[z]);
    nwOH[z] = Integer.parseInt(wOH[z]);
    nuaOH[z] = Integer.parseInt(uaOH[z]);
    }

2 个答案:

答案 0 :(得分:2)

您可以使用DecimalFormat以自定义格式解析整数:

import java.text.DecimalFormat;
import java.text.ParseException;

public class DecimalFormatTest {

    public static void main(String[] args) throws ParseException {
        DecimalFormat decimalFormat = new DecimalFormat("#;#-");
        System.out.println(decimalFormat.parse("123-").intValue());
        System.out.println(decimalFormat.parse("321").intValue());
    }
}

输出:

-123
321

答案 1 :(得分:0)

尝试这样的事情。它将在结束时检测连字符并在解析数字之前将其删除,并将其设置为负值。

private int parseInt(String str) {

    if (str.endsWith("-")) {
        str = str.substring(0, str.length() - 1);
        return -Integer.parseInt(str);
    } else {
        return Integer.parseInt(str);
    }
}