2

我被喂了一个看起来像这样的字符串:

"lang":"fr","fizz":"1","buzz":"Thank you so much."

真正的字符串很长,但遵循这种逗号分隔"key":"value"对的模式。我想去掉 s 周围的所有双引号key,我想value用单引号替换所有 s 周围的双引号,这样我的字符串将如下所示:

lang:'fr',fizz:'1',buzz:'Thank you so much.'

我最好的尝试:

kvString = kvString.replaceAll("\"*\":", "*:");
kvString = kvString.replaceAll(":\"*\"", ":'*'");

System.out.println(kvString);

当我运行它时,我kvString看起来像:

"lang*:'*'fr","fizz*:'*1","buzz*:'*Thank you so much."

谁能发现我哪里出错了?提前致谢。

4

2 回答 2

6
String str = "\"lang\":\"fr\",\"fizz\":\"1\",\"buzz\":\"Thank you so much.\"";
System.out.println(str.replaceAll ("\"([^\"]*)\":\"([^\"]*)\"", "$1:'$2'"));
于 2013-02-15T13:10:50.220 回答
0

您想要做的是使用正则表达式将逗号分隔的字符串分解为一组关键字值对。每个逗号分隔的字符串都具有“关键字”:“值”的格式,您要做的是将其转换为关键字:“值”。

为此,您必须让正则表达式记住关键字并记住值,然后在 replaceAll 的输出中将字符串的这些部分放回另一个字符串。

这个stackoverflow,非 cpaturing组提供了有关组的更多信息。而且这篇文章还谈到了分组语法

于 2013-02-15T13:24:23.567 回答