【问题标题】:java.lang.NumberFormatException for UTF-8 StringUTF-8 字符串的 java.lang.NumberFormatException
【发布时间】:2012-03-25 14:17:51
【问题描述】:

这是我为解决此错误而采取的步骤。

move_to_send = Integer.toString(b_id); // b_id >= 0 && b_id <= 8

// Send over socket
byte[] buf = move_to_send.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, ADDRESS, opp_port);
socket.send(packet);

byte[] buf = new byte[GAME_DATA.BUF_SIZE];
DatagramPacket packet = new DatagramPacket(buf, GAME_DATA.BUF_SIZE);
socket.receive(packet);
byte[] data = packet.getData();
move_received = new String(data, "UTF-8");

// Error then occurs at this line
int move = Integer.parseInt(move_received);

我只是想通过套接字发送一个整数。也许有更好的方法?我仍然想知道为什么会发生这个错误,因为如果我打印字符串 move_received 它是一个数字字符串

【问题讨论】:

  • 你在解析之前尝试过修剪字符串吗?
  • move_received 包含哪些字符?
  • 你有没有试过看看move_received包含什么?
  • 我觉得很傻。修剪工作。当我打印字符串进行调试时,我从不考虑前导空格,只考虑尾随

标签: java string parsing int


【解决方案1】:

您应该改用getBytes("UTF-8")

没有看到 trim 解决它的评论,但仍然 - 添加一些信息。

getBytes 返回系统默认字符集中的字符串,因此这可能会导致您的字符串出现乱码。

但是,由于您的 String 仅包含数字 - 并且数字在 ASCII 范围内 - 这应该不会导致您遇到的问题 - 因为大多数字符集(如 ISO-XXXX)是一字节字符集,而 UTF-8 代表ASCII 字符也使用一个字节。

无论如何,这是未来的好习惯。

【讨论】:

    【解决方案2】:

    使用 ObjectOutputStream 发送数据,使用 ObjectInputStream 读取数据。然后您可以以任何格式发送数据,包括字符串、整数或您选择的任何其他格式。

    原来我昨天回答了一个有点相关的问题,并给出了一些示例代码。您可能会发现示例代码也很有用。见Cannot communicate with server in Java

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2017-03-04
      • 2015-01-19
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2013-01-17
      相关资源
      最近更新 更多