我有一个字符串,其形式为:
{'var1':var2}
我能够解析这个字符串,以便 var1 和 var2 都是字符串变量。但是,它需要多个字符串标记器调用,首先从“:”中拆分,然后提取数据。
那么什么是最好的(最少的代码行)来做到这一点?
如果您只想要一个包含两个值的数组,那么您可以通过提取子字符串然后在“':”上拆分来分两行完成。它最终看起来像这样:
s = s.substring(2, s.length()-1);
String[] sarr = s.split("':");
如果你真的想要一行代码,你可以将它们组合成:
String[] sarr = s.substring(2, s.length()-1).split("':");
这应该有效:
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正则表达式引擎不喜欢未{
转义的用户未知点。逃脱了它。
这在一般情况下是无法解决的。考虑例如:
案例一)
变量1=
:':':
var2=
':'
完整的原始字符串将是
{':':':':':'}
案例 b) var1=
:
var2=
':':':'
完整的原始字符串将是
{':':':':':'}
所以,我们需要“更多信息”。根据您的要求/用例,您必须忍受歧义,对字符串施加限制,或对字符串进行转义/编码。
类似(脆弱 - 见评论):
// 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);
您可以使用正则表达式:
String re = "\\{'(.*)':(.*)}";
String var1 = s.replaceAll (re, "$1");
String var2 = s.replaceAll (re, "$2");
你需要掩盖开头{
,否则你会得到一个 java.util.regex.PatternSyntaxException: Illegal repeat