2016-08-08 10 views
-2

入力がスキャナを通過しました。それは数字と文字とスペースの両方を持っています。テキストがスローされたときの入力から合計を計算しようとしています

文字が削除され、スペースと数字のみが残ります。

スペースなしI入力は、それが正常に動作しますが、私は、スペースを追加する場合、それはエラーをスローした場合:

java.lang.NumberFormatException: For input string: "" (in java.lang.NumberFormatException)

これはライン

int型dataInt = Integer.parseInt(データに対して適用されます[私]);

Stderr outputs java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.parseInt(Integer.java:615) at Program2.main(Program2.java:21)

コードは

import java.util.*; 
import java.io.*; 

public class Program2 { 

public static void main(String[] args) { 
    Scanner kb = new Scanner(System.in); 
    String input = kb.nextLine(); 
    input = input.replaceAll("[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]",""); 
    System.out.println(input); 
    while(!input.equals("#")){ 
     String[] data = input.split(" "); 
     int sum = 0; 
     if (!input.equals("")){ 
      for(int i = 0; i < data.length; i++){ 
       int dataInt = Integer.parseInt(data[i]); 
       sum = sum + dataInt; 

      } 

     } 
     System.out.println(sum); 
     input = kb.nextLine(); 
    } 
} //main 


} // class Program2 
+0

"\\のS +" ''に分割、又は '呼び出しデータ[I] .trim()' 'Integer.parseInt' –

+3

PSST適用する前に:' [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ] '==' [-ZAを-Z] 'となります。 Regexは私を殺します。 – Pshemo

+0

Thx @Pshemo –

答えて

1

を下回っているこのプログラムは、各行のすべての数字を抽出し、それらを合計することになっていることが判明しました。各行は、自由に文字やスペースと混在することができます。例:fsdjs 3 8 herlks 983は間違っていくつかのことがありました994

生成する必要があります

if (!input.equals("")) 
    for(int i = 0; i < data.length; i++){ 
入力が空の場合

のみチェックしますが、それは我々が心配する必要があります分割サブストリングの配列でなければなりません それが私たちが取り組むべきことです。 split()を呼び出した後に空の文字列があります。あなたのコードを実行している間、それは本当に

for(int i = 0; i < data.length; i++){ 
    if (!data[i].equals("")) 

する必要があり、parseInt()の呼び出し中にプログラムが空白に追いついます倍があるように思われます。どのように動作したのかわからないが、それはreplaceAll()の数で行わなければならなかった。

文字列入力は、基本的に一連のアルファベットとスペースで区切られた数字のリストです。 replaceAll()を複数回呼び出すのではなく、input.split("[^\\d]+)で分割するだけで済みます。

import java.util.*; 
import java.io.*; 

public class Program2 { 
    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     String input = kb.nextLine(); 
     System.out.println(input); 

     while(!input.equals("#")) { 
      //     VVV 
      String[] data = input.split("[^\\d]+"); 
      int sum = 0; 

      for(int i = 0; i < data.length; i++) { 
       if (!data[i].equals("")) { 
        int dataInt = Integer.parseInt(data[i]); 
        sum = sum + dataInt; 
       } 
      } 

      System.out.println(sum); 
      input = kb.nextLine(); 
     } 
    } //main 
} // class Program2 
関連する問題