3

我有一个字符串,其形式为:

{'var1':var2}

我能够解析这个字符串,以便 var1 和 var2 都是字符串变量。但是,它需要多个字符串标记器调用,首先从“:”中拆分,然后提取数据。

那么什么是最好的(最少的代码行)来做到这一点?

4

5 回答 5

4

如果您只想要一个包含两个值的数组,那么您可以通过提取子字符串然后在“':”上拆分来分两行完成。它最终看起来像这样:

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

如果你真的想要一行代码,你可以将它们组合成:

String[] sarr = s.substring(2, s.length()-1).split("':");
于 2012-05-19T00:35:22.227 回答
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 回答
2

这在一般情况下是无法解决的。考虑例如:

案例一)

变量1=

:':':

var2=

':'

完整的原始字符串将是

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

案例 b) var1=

:

var2=

':':':'

完整的原始字符串将是

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

所以,我们需要“更多信息”。根据您的要求/用例,您必须忍受歧义,对字符串施加限制,或对字符串进行转义/编码。

于 2012-05-19T01:07:18.937 回答
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 回答