2016-11-27 99 views
0

我试图用插座
执行此代码时我得到NumberFormatException的数字格式异常输入字符串到整数

public class ThreadSocket extends Thread { 
    Socket socket; 
    int k; 

    ThreadSocket(Socket socket) { 
     this.socket = socket; 
    } 

    public void run() { 
     try { 
      String message = null; 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      while ((message = bufferedReader.readLine()) != null) { 
       System.out.println("Incomming message client : " + message); 
       k += Integer.parseInt(message); 
       System.out.println("la somme est :" + k); 
      } 
      socket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

此异常收到消息:

Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "3 : 2" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at ThreadSocket.run(ThreadSocket.java:33) 
+0

所以接收的消息显示为'3:2'。我无法从你的问题中知道这是否是有意的,但你正在尝试将tp convert转换为一个整数。你不能这样做。您只能将字符串符合整数的语法,如'4','23463'或'-2034284621'。 –

+0

您可能想告诉我们所需的行为,它会更容易帮助您。 –

+0

Incomming message client:user:+30 线程“Thread-0”中的异常java.lang.NumberFormatException:对于输入字符串:“user:+30” \t at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65 ) \t在java.lang.Integer.parseInt(Integer.java:580) \t在java.lang.Integer.parseInt(Integer.java:615) \t在ThreadSocket.run(ThreadSocket.java:33) – anonimosz

回答

1

我仍然不太确定套接字上收到的消息是什么。以下内容将接受形式为client : number的消息以及仅包含该号码的消息。决定这是否是你需要的。

 while ((message = bufferedReader.readLine()) != null) { 
      System.out.println("Incomming message client : " + message); 
      // is there a colon followed by a space in the message? 
      final String delimiter = ": "; 
      int indexOfColon = message.lastIndexOf(delimiter); 
      if (indexOfColon == -1) { // no, no colon and space in message 
       // try to use entire message 
       k += Integer.parseInt(message); 
      } else { // yes 
       // take out the part after the colon and space and try parsing it as an integer 
       int number = Integer.parseInt(message.substring(indexOfColon + delimiter.length())); 
       k += number; 
      } 
      System.out.println("la somme est :" + k); 
     } 
+0

yess thanks ole vv – anonimosz

0

你必须投你的输入字符串的数字一个接一个。 然后你可以将它们分开。

+0

这是最好发表这种类型的答案,作为评论 –

+0

如何? ??????? – anonimosz

+0

请确保代码发送 – anonimosz