NumberFormatException错误(parseInt)

Ale*_*lex 5 java string integer numberformatexception

希望这是一个非常简单的查询,但它让我摸不着头脑.

我有一个字符串,它只是一个整数,我试图将该整数作为一个整数输出.面对它应该不是问题.

// this is how I create the string (it's the playload from a UDP datagram packet, 
// thought I don't think the origins hugely important - it's juts a test run so the
// stringMessage is always 1 (created by a seperate client process)

  ...
  recvSoc.receive(pac);
  String stringMessage = new String(pac.getData());
  port = pac.getPort();
  System.out.println("RECEIVED: " + stringMessage + " on port:  " + port);
  processMessage(stringMessage);
  ...

// Then in processMessage

public void processMessage(String data) {
  int message;
  message = Integer.parseInt(data);
  ...
Run Code Online (Sandbox Code Playgroud)

这总是因NumberFormatException错误而崩溃.我无法为我的生活弄清楚是什么导致了这一点,任何想法都非常感激.我在Java(最近)中没有编写太多代码,所以可能只是忘记了一些关键的东西或者什么不是.

Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:514)
at udp.UDPServer.processMessage(UDPServer.java:85)
at udp.UDPServer.run(UDPServer.java:52)
at udp.UDPServer.main(UDPServer.java:156)
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 5

如果字符串确实存在1,则不会发生异常.所以我会说字符串实际上不是1.

做一个data.toCharArray()并打印每个角色的代码(强制转换为int).例如,可能会发现数字前面有一个隐藏的字符.(编辑:当我写答案时,似乎iluxa在评论中提到了这个选项)

data = data.trim()在传递之前尝试一下parseInt(..)


Joa*_*uer 4

请注意,DatagramPackate.getData()返回整个缓冲区

您收到的数据只是其中的一部分:

接收到的数据或要发送的数据从offset缓冲区中开始,一直运行很length长时间。

因此,要将数据转换为 a,String您应该使用此构造函数

String message = new String(pac.getData(), pac.getOffset(), pac.getLength(), "UTF-8");
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里指定了 UTF-8 编码,因为不指定编码将导致使用平台默认编码,这通常不是您想要的。