2017-12-11 13 views
0

「4 + 5 *(4.5 + 6)」などの文字列から数値(Doubleを含む)を区切ります。 スキャナを使って文字列と数字を分けることを考えました。それを行うより良い方法があるかどうか聞いてみたいと思います。スキャナーでどうすればいいですか? これはちょうどそれが動作するかどうかを確認したかったし、それが例外を投げ、私のコードです...スキャナを使用して文字列を区切る

package testzehavit; 

import java.util.Scanner; 

public class main { 

    public static void main(String[] args) { 
     Scanner s= new Scanner("443+54+24"); 
     s.useDelimiter("+"); 
     System.out.println(s.next()); 

    } 

} 

+1

あなたは、ネストされた算術式を評価するために計画していますか?正規表現を使用しないでください。パーサーを使用してください。 –

答えて

1

this question/answerからは+をエスケープする必要があります。この方法ではリテラル文字列ではなく正規表現が使用されるためです。 Javaではダブルバックスラッシュ\\でエスケープします。このコード:

public static void main(String[] args) { 
    Scanner s = new Scanner("443+54+24"); 
    s.useDelimiter("\\+"); 
    System.out.println(s.next()); 
} 

プリント443

1

スキャナの区切り文字は正規表現です、ありがとうございました。シンボル '+'は、正規表現で「1回以上」と言っています。あなたが何をしたいか

は次のとおりです。

public static void main(String[] args) { 
    Scanner s= new Scanner("443+54+24"); 
    s.useDelimiter("\\+"); 
    System.out.println(s.next()); 

} 
+0

ありがとう!複数の区切り文字を使用したい場合はどうすればよいですか? (例えば、文字列 "4 + 5 *(4.5 + 6)"の場合)。出来ますか? – Jovani

+0

それから '\\ + | \\ *' –

+0

を使用することができます。 "" [+ * \\(\\)\\。\ "]" ' –

0

利用String.contains();方法。 数値とその中のオペランドの範囲を表す正規表現を置くことができます。単純なfor-loopを実行し、Stringへの各繰り返しを解析して、containsメソッドにargurmentとして渡します。

申し訳ありませんがコードをデモするために私は私の携帯電話にあります。 Google String.contains()と正規表現。あなたは2つを組み合わせることができるはずです。

0

のpublic static無効メイン(文字列[] args){

Scanner s = new Scanner("443+54+24"); 

s.useDelimiter("\\+"); 

System.out.println(s.next()); 

は}