在java中解析这个字符串的最佳方法?

时间:2012-05-19 00:14:29

标签: java regex string parsing tokenize

我有一个字符串形式:

{'var1':var2}

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

那么最好的(最少的代码行)是什么?

5 个答案:

答案 0 :(得分:4)

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

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

如果您真的想要一行代码,可以将它们合并到:

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

答案 1 :(得分: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正则表达式引擎不喜欢{未转义为用户未知指出。逃脱了。

答案 2 :(得分:2)

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

案例a)

VAR1 =

:':':

VAR2 =

':'

完整的原始字符串将是

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

案例b) VAR1 =

:

VAR2 =

':':':'

完整的原始字符串将是

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

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

答案 3 :(得分: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);

答案 4 :(得分:0)

您可以使用正则表达式:

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

你需要屏蔽开头{,否则你会得到一个java.util.regex.PatternSyntaxException:非法重复