Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java解析这个字符串的最佳方法是什么?_Java_Regex_String_Parsing_Tokenize - Fatal编程技术网

用java解析这个字符串的最佳方法是什么?

用java解析这个字符串的最佳方法是什么?,java,regex,string,parsing,tokenize,Java,Regex,String,Parsing,Tokenize,我有一个字符串,其形式为: {'var1':var2} 我能够解析这个字符串,所以var1和var2都是字符串变量。但是,需要多次字符串标记器调用,首先从“:”中拆分,然后提取数据 那么什么是最好的(最少的代码行)?类似于(易碎-请参见注释): // 3 lines.. String[] parts = "{'var1':var2} ".trim().split("':"); String var1 = parts[0].substring(2,parts[0].length); Strin

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

{'var1':var2}
我能够解析这个字符串,所以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);

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

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正则表达式引擎不像用户unknown指出的那样{未被替换。将其转义。

您可以使用正则表达式:

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

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

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

案例a)

var1=

var2=

完整的原始字符串将是

{':':':':':'}
{':':':':':'}
案例b) var1=

var2=

完整的原始字符串将是

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

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

字符串的花括号部分是吗?Var one是逗号还是var2?您是否可以使用Apache commons或Google Guava?这看起来与JSON非常相似…@MikeMcMahon:JSON使用双引号围绕所有字符串。“什么是最好的(最少的代码行)?当前需要多少行?是否包括“空白”行?。@MarkByers因此有一句奇怪的话:){“这是冒号和单引号-inside-var1:::无趣}”这是因为:“inside var1或var2-但我认为这些情况无法解决/未确定。对,但仅限于以下情况”:“inside var1Correction:即使如此,它也会起作用。如果不告诉正则表达式,则它们是贪婪的,如果分号位于单引号之间,则不会产生混淆。我认为第一个字符串甚至可以包含单引号(未测试)Regex无法解析/匹配任意嵌套和转义引号。需要一个真正的解析器来解析/匹配。Regex对于冒号内引号问题来说是令人满意的,如果它构造正确,正如@m0skit0所指出的。我想你必须屏蔽开头{,否则它将开始一个无效的重复。
':':':'
{':':':':':'}