2011-11-14 8 views
2

は、私は0以上を入力してユーザーを想定し、私はJavaが配列Javaで文字列を解析するには?

{5, +4, +3, -2, -10, +15} 

にこの文字列を解析する必要があり、この

5 + 4 + 3 - 2 - 10 + 15 

のような文字列を取るシンプルな電卓アプリケーションを作成しようとしています各番号と各オペレータの間のスペース

私はJavaを使い慣れていないので、これを達成する方法は完全にはわかりません。

+0

正規表現を使うのが最も簡単な方法です( 'Matcher'と' Pattern'クラス)。それは言われている、あなたは本当にあなたがしたいことだと確信していますか?あなたはこれら2つの配列で何をしますか? –

+0

私はこれが仕様外にあると思います。あなたの宿題の中では、(文字列を解析して)評価する簡単な方法は、[この例]に見られるような 'ScriptEngine'を使っています(http://stackoverflow.com/questions/7441625/how-to- A-BOOK-IN-AWT-計算機 - 宿題/ 7441804#7441804)。 –

答えて

0

ここでの回答のいくつかの入力をオフに基づいて、私はこれを見つけ最高の解決策になること

// input 
String s = "5 + 4 + 3 - 2 - 10 + 15"; 
ArrayList<Integer> numbers = new ArrayList<Integer>(); 

// remove whitespace 
s = s.replaceAll("\\s+", ""); 

// parse string 
Pattern pattern = Pattern.compile("[-]?\\d+"); 
Matcher matcher = pattern.matcher(s); 

// add numbers to array 
while (matcher.find()) { 
    numbers.add(Integer.parseInt(matcher.group())); 
} 

// numbers 
// {5, 4, 3, -2, -10, 15} 
0

Integer.parseIntを使用して、Stringクラスで実現できる文字列を分割して値を取得できます。正規表現は、仕事ができるが、私はそれらを行う方法を知らない:

String str = "1 + 2"; 
System.out.println(java.util.Arrays.toString(str.split(" "))); 

[1、+、2]

なお、スプリット:3

0

String.split()を見てみましょう正規表現を使うので、 "。"で区切るには文字を引用する必要があります。特別な意味を持つ類似の文字。また、行内の複数のスペースは、スキップする必要がある解析配列に空の文字列を作成します。

これは簡単な例を解決します。真の表現をより厳密に解析するには、文法を作成し、Antlrのようなものを使用したいと思うでしょう。

0

strをラインバッファにしてください。

パターン([-+]?[ \t]*[0-9]+)の場合はRegex.matchを使用してください。

String[] tokensにすべての一致を追加してください。あなたが肯定後読みを使うことができ

String s[] = tokens[i].split(" +"); 
if (s.length > 1) 
    tokens[i] = s[0] + s[1]; 
else 
    tokens[i] = s[0]; 
0

tokentokensにそれぞれがため

その後、

String s = "5 + 4 + 3 - 2 - 10 + 15"; 
    Pattern p = Pattern.compile("(?<=[0-9]) +"); 
    String[] result = p.split(s); 

    for(String ss : result) 
     System.out.println(ss.replaceAll(" ", "")); 
0
String cal = "5 + 4 + 3 - 2 - 10 + 15"; 
    //matches combinations of '+' or '-', whitespace, number 
    Pattern pat = Pattern.compile("[-+]{1}\\s*\\d+"); 
    Matcher mat = pat.matcher(cal); 
    List<String> ops = new ArrayList<String>(); 
    while(mat.find()) 
    { 
     ops.add(mat.group()); 
    } 
    //gets first number and puts in beginning of List 
    ops.add(0, cal.substring(0, cal.indexOf(" "))); 

    for(int i = 0; i < ops.size(); i++) 
    { 
     //remove whitespace 
     ops.set(i, ops.get(i).replaceAll("\\s*", "")); 
    } 

    System.out.println(Arrays.toString(ops.toArray())); 
    //[5, +4, +3, -2, -10, +15]