2016-11-27 45 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