2016-07-03 15 views
-3

コンストラクタがStringオブジェクトを受け取るsplit関数を作成しました (For Example: 21.316621 87.01393 9830.686907)。split()関数を使用して3つの部分に分割しました。次に、これら3つの新しいStringオブジェクトを3つのプリミティブ型doubleに変換します。私は、これらの二重の値にいくつかの算術演算を実行したいが、それはfollowing--数値形式の例外

Exception in thread "main" java.lang.NumberFormatException: empty String 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
at java.lang.Double.parseDouble(Double.java:538) 

Split関数としての例外を示している

public class Split { 


public Split(String str){ 


Double[] lla = new Double[3]; 


    String[] parts=str.split("\t"); 


lla[0] = Double.parseDouble(parts[0]); 


lla[1] = Double.parseDouble(parts[1]); 
lla[2]= Double.parseDouble(parts[2]); 
lla[0]+=123.567; 
lla[1]+=12.456; 
lla[2]+=76.5678; 
System.out.println(lla[0]); 
System.out.println(lla[1]); 
System.out.println(lla[2]); 
System.out.println(); 
} 
} 

このproblem.Thanksの私を助けてくださいfollowing--ようですparts[0]parts[1]parts[2]Stringあるとdouble値が含まれていません:

+0

各番号を区切るのに2つ以上のタブを使用すると、どのようなことが起こりますか? (これはあなたの問題です) – Tom

+1

デバッガを使用してください。問題を見つけるためにコードにSystem.out.println()を追加します。メッセージはかなり明確です:あなたの部分の1つは、実際には空の文字列です。これはデバッグ101です。 –

+0

本当の文字列を関数に渡すことは確実ですか?また、 "\ t"はあなたの文字列がスペースではなく "\ t"で分割されていると確信していますか? – pooyan

答えて

-1

このエラーは、これらのいずれかがあることを意味します。だからJavaはそれをDoubleに解析しませんでした。入力したStringの入力を確認して、partsアレイを作成します。

入力を変更できない場合は、解析する前にpartsアレイから空の値を確認して削除してください。

同じメソッドであるが入力が異なる場合は、同じエラーが発生していることを確認してください。here

-1

あなたがを使用している場合は、わからない、空の文字列は、それがコンストラクタのパースセクションになりますようにするには、以下の

String[] parts = Stream.of(str.split("\\s"))  // Split at each whitespace 
         .filter(x -> !x.isEmpty()) // Exclude empty Strings 
         .toArray(String[]::new); // Makes a new String array of it 

String[] parts = str.split("\t")

を交換してください。

+0

悲しい部分:現在処理されていないが、最初のアプローチであった 'str'の最初または最後にタブ文字がありませんでした^^。ごめんなさい。 Btw:私はここに投票していない。 – Tom

+0

私はどちらも、しかし、それは文字列の最初または最後にタブの誤った取り扱いのために起こったと思いますか?(これは私のせいだが) – Tom

+0

@Tomまあ、私は何を考えるべきか、働くコードの2つのdownvotes ... –