在Java中无法将字符串转换为整数

4

在我的程序中,我需要将一个字符串转换为整数。

    String str = new String(request.getData());

    String [] setting = str.split(" ");        
    String bs = setting[1];

bs的值为1024,我使用System.out.println进行测试,屏幕显示为“1024”。

但是当我使用

    int blockSize = Integer.parseInt(bs); 

如果发生异常,会返回指向Integer.parseInt这一行的异常点:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1024"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
  at java.lang.Integer.parseInt(Integer.java:458)
  at java.lang.Integer.valueOf(Integer.java:554)

有人可以帮我解决这个问题吗?谢谢。


你确定 bs 包含 1024 吗?如果是这样的话,那么你不应该遇到任何问题。 - lxcky
1
@darknight,我认为这不是过多空格的问题,因为他正在使用空格作为分隔符。 - lxcky
我认为你的bs包含的是“字符串”值而不是“整数”,所以出现了这个错误。请确保setting[postion]是一个“整数”值。我的意思是像“一些值”这样的东西。 - Rustam
7
@jacobbb - 我怀疑你的代码中有看不见的字符。bs.length() 可能会有所帮助,甚至可能需要使用循环输出它们的字符代码:for (char ch : bs.toCharArray() ) { System.out.println(Integer.toHexString(ch)); } - T.J. Crowder
2
我认为问题出在一些Unicode隐藏字符上。测试字符串的长度并检查它是否确实为4。 - enrico.bacis
@T.J.Crowder,谢谢,我试过bs.length,返回值是1019…为什么会是这个值?我使用了enrico建议的"bs = bs.replaceAll("\D", "");",问题得到了解决。 - jacobbb
3个回答

10

我怀疑在字符串bs中有一些隐藏的Unicode字符,您可以使用以下代码删除非数字字符:

```python import re bs = re.sub(r'\D', '', bs) ```
bs = bs.replaceAll("\\D", "");
int blockSize = Integer.parseInt(bs);

上面的代码还会将字符串"1a2"转换为12,但那似乎不是你的情况。


我尝试了bs.length(),返回值为1019...然后我使用了"bs = bs.replaceAll("\D", "");",问题解决了,谢谢。 - jacobbb
是的..1019..我不知道为什么,数组setting[]是从datagramSocket发送的,这与此有关吗? - jacobbb

1

try this code:

 String bs = setting[1].trim().toString();

0
    while( (!bs.matches("\\d+")) && (bs.length > 1)) 
    {
        bs = bs.substring(1);
    }

    if (bs.matches("\\d+")
    {
        int blockSize = Integer.parseInt(bs);
    }
    else
    {
        int blockSize = -1;
    }
    /* !! Then, check for "-1" in your application of 
          block size #runtime_exception_prevention */

这将继续删除非数字位,直到找到一个数字或字符串中只剩下一个字符为止。第二个检查可以防止异常并返回标记值。检查此标记值将拦截运行时异常。 注意:我在注释块中编写了此代码,请原谅任何小错误,我将乐意更正。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接