【问题标题】:Integer.parseInt converts everything to zeroInteger.parseInt 将所有内容都转换为零
【发布时间】:2021-12-31 17:58:08
【问题描述】:

大家好,我是 java 新手,我有一个问题。我接受一个String类型的数字,然后将其写入txt变量,然后覆盖并添加“\ n”,然后尝试将其转换为int类型,但是无论数字是什么,它总是结果是零。

        BufferedReader in = new BufferedReader(new InputStreamReader(clientConn.getInputStream()));     
        String txt = in.readLine();          
        txt = txt + "\n";                
        int number = Integer.parseInt(txt);

如果我尝试运行包含这些代码行的单独类,则会引发错误。

线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“1 "

我发送的任何号码都是如此。总是在int number = Integer.parseInt(txt); 线上发誓。 告诉我如何解决这个问题。

【问题讨论】:

  • 为什么要在号码后面加上\n?
  • 事实是,只有在移动到下一行时,我才能再次读取传入的数据,因为这段代码处于循环中并从 TCP 客户端接收数字。
  • 但这与txt = txt + "\n" 有什么关系?试着去掉那行代码。
  • 如果txt = txt +" \ n "留在代码中,那么在执行int number = Integer.parseInt (txt);这行之后,number的值被传递给另一个类,如果我删除txt = txt +" \ n ",那么循环就接受数据,但不会将其传递给另一个类。
  • 你最后的评论毫无意义。

标签: java integer parseint


【解决方案1】:

你传递了无效的输入

正如 cmets 所指出的,您将 newline 添加到被解析为整数的文本中,从而掺杂了输入:

txt = txt + "\n";  

所以你违反了Integer.parse方法的合同。引用 Javadoc:

…字符串中的字符必须都是十进制数字…

您的解析尝试抛出 NumberFormatException,因为您向该方法传递了错误的输入。

int good = Integer.parseInt( "42" ) ;
int bad = Integer.parseInt( "666" + "\n" ) ; // Throws a `NumberFormatException` because of the appended newline.

看到code run live at IdeOne.com。

你问:

告诉我如何解决这个问题。

将有效输入传递给方法,如文档所述:仅包含数字的文本,前面是可选的-/+。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2019-11-02
    • 2022-01-04
    • 1970-01-01
    • 2023-03-22
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多