は、私は0以上を入力してユーザーを想定し、私はJavaが配列Javaで文字列を解析するには?
{5, +4, +3, -2, -10, +15}
にこの文字列を解析する必要があり、この
5 + 4 + 3 - 2 - 10 + 15
のような文字列を取るシンプルな電卓アプリケーションを作成しようとしています各番号と各オペレータの間のスペース
私はJavaを使い慣れていないので、これを達成する方法は完全にはわかりません。
は、私は0以上を入力してユーザーを想定し、私はJavaが配列Javaで文字列を解析するには?
{5, +4, +3, -2, -10, +15}
にこの文字列を解析する必要があり、この
5 + 4 + 3 - 2 - 10 + 15
のような文字列を取るシンプルな電卓アプリケーションを作成しようとしています各番号と各オペレータの間のスペース
私はJavaを使い慣れていないので、これを達成する方法は完全にはわかりません。
ここでの回答のいくつかの入力をオフに基づいて、私はこれを見つけ最高の解決策になること
// 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}
Integer.parseIntを使用して、Stringクラスで実現できる文字列を分割して値を取得できます。正規表現は、仕事ができるが、私はそれらを行う方法を知らない:
String str = "1 + 2";
System.out.println(java.util.Arrays.toString(str.split(" ")));
[1、+、2]
なお、スプリット:3
はString.split()を見てみましょう正規表現を使うので、 "。"で区切るには文字を引用する必要があります。特別な意味を持つ類似の文字。また、行内の複数のスペースは、スキップする必要がある解析配列に空の文字列を作成します。
これは簡単な例を解決します。真の表現をより厳密に解析するには、文法を作成し、Antlrのようなものを使用したいと思うでしょう。
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];
:token
tokens
にそれぞれがため
その後、
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(" ", ""));
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]
正規表現を使うのが最も簡単な方法です( 'Matcher'と' Pattern'クラス)。それは言われている、あなたは本当にあなたがしたいことだと確信していますか?あなたはこれら2つの配列で何をしますか? –
私はこれが仕様外にあると思います。あなたの宿題の中では、(文字列を解析して)評価する簡単な方法は、[この例]に見られるような 'ScriptEngine'を使っています(http://stackoverflow.com/questions/7441625/how-to- A-BOOK-IN-AWT-計算機 - 宿題/ 7441804#7441804)。 –