当我转换的字符串是一个int
时,我似乎无法弄清楚为什么它会使NFE失效[代码]
public void setCurrentTransferRate(){
try{
long startTime = System.currentTimeMillis();
String[] command = {"/bin/sh", "-c", "ifconfig " + interface_name + " | grep -oP 'RX bytes:[0-9]{1,11}'"};
String[] command1 = {"/bin/sh", "-c", "ifconfig " + interface_name + " | grep -oP 'TX bytes:[0-9]{1,11}'"};
Process child = Runtime.getRuntime().exec(command);
Process child1 = Runtime.getRuntime().exec(command1);
BufferedReader r = new BufferedReader(new InputStreamReader(child.getInputStream())); //i prwti metrisi twn RX kai TX bytes
BufferedReader r1 = new BufferedReader(new InputStreamReader(child1.getInputStream()));
String temp = r.readLine();
temp = temp.replace("RX bytes:","");
String temp1 = r1.readLine();
temp1 = temp1.replace("TX bytes:","");
r.close();
r1.close();
int x = Integer.parseInt(temp);
int y = Integer.parseInt(temp1);
}catch(IOException e){e.printStackTrace();}
catch(InterruptedException e){e.printStackTrace();}
}[/code]
产生错误的字符串是temp
我收到错误
[代码]
Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "3262469144"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
at java.lang.Integer.parseInt(Integer.java:527)
at askisi1.General.setCurrentTransferRate(General.java:187)
at askisi1.General.<init>(General.java:27)
at askisi1.mainThread.run(mainThread.java:17)
at java.lang.Thread.run(Thread.java:722)[/code]
我真的可以在这个上使用一双新鲜的眼睛
答案 0 :(得分:9)
整数的最大正值为Integer.MAX_VALUE
which is 2,147,483,647
。你可以用一个长的代替:
long x = Long.parseLong(temp);
它应该可以解决您的问题(如果您的所有数字都小于Long.MAX_VALUE
or 9,223,372,036,854,775,807
)。
答案 1 :(得分:4)
3262469144对于int来说太大了!