我有一个字符串形式:
{'var1':var2}
我能够解析这个字符串,以便var1和var2都是字符串变量。但是它需要多个字符串标记化器调用,首先从“:”拆分然后提取数据。
那么最好的(最少的代码行)是什么?
答案 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:非法重复