0

複数の区切り文字または単一の区切り文字を使用して、異なる文字列の一致を検出して分離するにはどうすればよいでしょうか?

たとえばScanner、次の文字列を解析するために a を使用します。

MrsMarple=新しい人(); MrsMarple.age=30;

この文字列を分離して、新しい人がいつ作成され、いつ年齢が設定されるかを順番に判断したいと思います。また、年齢が何歳に設定されているかを知る必要があります。

これらの引数の間に、および/またはその両側に何かを入れることができます (必ずしもそれらの間にスペースを入れる必要はありませんが、セミコロンは必要です)。「MrsMarple」はどんな言葉でもかまいません。また、同じ行の「//」(2 つのスラッシュ) に続く引数は無視することをお勧めしますが、それはオプションです。

正規表現の使用に代わる簡単な方法を考えられる場合は、喜んで検討します。

4

2 に答える 2

2

単純な分割/ループアプローチを試すかもしれません。

与えられたString input = "MrsMarple=new Person(); MrsMarple.age=30;"

String[] noComments = input.split("//");
String[] statements = input.split(noComments[0]);
for(String statement: statements) {
    String[] varValue = statement.split("=");
    ...
    // Additional MrsMarple-SmartSense Technology (tm) here...
    ...
}

String.trim()および/または他の単純なツールの賢明な使用で。

于 2012-07-31T15:45:25.570 に答える
2

または、問題をより一般的にするために (正規表現なしで)、スクリプトを試すことができます (スクリプト言語の構文のように見えるため): http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/。例:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
String input = "MrsMarple=new Person(); MrsMarple.age=30;"
try {
  jsEngine.eval(input);
} catch (ScriptException ex) {
    ex.printStackTrace();
}

この場合、age という public フィールドを持つ Person という Java クラスが必要になります。上記のコードはテストされていません。次のようなものを追加する必要があるかもしれません

jsEngine.eval("importPackage(my.package);");

それを機能させるために。とにかく、オラクルのチュートリアルは役に立ちます。

于 2012-07-31T16:30:05.913 に答える