3

次の形式の文字列があります。

{'var1':var2}

var1とvar2が両方とも文字列変数になるように、この文字列を解析することができました。ただし、最初に「:」から分割し、次にデータを抽出するために、複数の文字列トークナイザー呼び出しが必要です。

では、これを行うのに最適なもの(コードの最小行)は何でしょうか?

4

5 に答える 5

4

2 つの値を含む配列だけが必要な場合は、部分文字列を抽出して "':" で分割することにより、2 行で行うことができます。最終的には次のようになります。

s = s.substring(2, s.length()-1);
String[] sarr = s.split("':");

本当に 1 行のコードが必要な場合は、次のように組み合わせることができます。

String[] sarr = s.substring(2, s.length()-1).split("':");
于 2012-05-19T00:35:22.227 に答える
2

これは一般的なケースでは解決できません。たとえば、次のことを考慮してください。

ケースa)

var1 =

:':':

var2 =

':'

完全な元の文字列は

{':':':':':'}

ケースb)var1 =

:

var2 =

':':':'

完全な元の文字列は

{':':':':':'}

したがって、「より多くの情報」が必要です。要件/ユースケースに応じて、あいまいさを回避するか、文字列に制限を設けるか、文字列をエスケープ/エンコードする必要がありました。

于 2012-05-19T01:07:18.937 に答える
2

これはうまくいくはずです:

String yourstring = "{'var1':var2}";
String regex = "\\{'(.+)':(.+)}";
Matcher m = Pattern.compile(regex).matcher(yourstring);
String var1 = m.group(1);
String var2 = m.group(2);

編集:コメンテーター向け:

弦:

{'this is':somestring':more stuff:for you}

出力:

var1 = this is':somestring
var2 = more stuff:for you

PS: Perl でテスト済みです。Java は手元にありません。申し訳ありません。

編集:ユーザー不明が指摘するように、Java 正規表現エンジンは{エスケープされていないようです。逃げた。

于 2012-05-19T00:35:22.723 に答える
1

(壊れやすい - コメントを参照) のようなもの:

// 3 lines..
String[] parts = "{'var1':var2}  ".trim().split("':");
String var1 = parts[0].substring(2,parts[0].length);
String var2 = parts[1].substring(0,parts[1].length-1);
于 2012-05-19T00:25:57.947 に答える
0

正規表現を使用できます:

String re = "\\{'(.*)':(.*)}";
String var1 = s.replaceAll (re, "$1");
String var2 = s.replaceAll (re, "$2");

開始をマスクする必要があり{ます。そうしないと、 java.util.regex.PatternSyntaxException: Illegal repeat が発生します。

于 2012-05-19T00:53:22.293 に答える