【问题标题】:String: How to insert double quotes around all occurrences of a character [closed]字符串:如何在所有出现的字符周围插入双引号 [关闭]
【发布时间】:2014-06-18 04:55:34
【问题描述】:

我有一个字符串,其中: 出现了多次。我希望: 的每个出现都用双引号括起来,例如":",而不截断它周围的数据。

我尝试使用String.replaceAll(":", "\":\"");,但它会截断: 周围的字符。

如何在不截断: 周围的字符的情况下将所有出现的: 括在"


编辑:-

我的字符串:-

{key1:value1,key2:value2,key3:{key4:value4,key5:value5,key6:{key7:{key8:value8}}},key9:value9}

更易读的表格:-

{
    key1:value1,
    key2:value2,
    key3:{
        key4:value4,
        key5:value5,
        key6:{
            key7:{
                key8:value8
            }

        }

    },
    key9:value9
}

我在做什么:-

responseString = responseString.replaceAll(":", "\":");// Put " before each occurance of :

responseString = responseString.replace(":[^\\Q{\\E]", ":\""); // Put " after each occurence of : except the ones preceded by {

输出:-

{key1":"alue1,key2":"alue2,key3":{key4":"alue4,key5":"alue5,key6":{key7":{key8":"alue8}}},key9":"alue9}

【问题讨论】:

  • but it truncates the characters around : 这是什么意思?有什么例子吗?
  • 调用replaceAll没有错,你是在String类上调用它吗,它不是字符串类的静态方法,在其他字符串上调用它
  • [status-norepro] could not reproduce.
  • 不是 DV'er,但您最初的问题并没有反映它已经演变成什么。因此问题无法重现,整体答案只是在黑暗中刺伤
  • 顺便说一句,让您的 json 正确生成而不是尝试破解它不是更好吗?

标签: java regex string replace insert


【解决方案1】:

您的方法可以正常工作,因为 replaceAll 将第一个参数作为 regExp 第二个作为替换 String

例如:

System.out.println("abc : pqr".replaceAll(":", "\":\""));

输出

abc ":" pqr

replaceAll 不会改变实际的String 它只是返回新替换的String

你需要分配它。

String str="key1\":value1";
str=str.replaceAll(":", "\":\"");

你可以试试这个简单的技巧。

String str="{key1:value1,key2:value2,key3:{key4:value4,key5:value5,key6:{key7:{key8:value8}}},key9:value9}";
str=str.replaceAll("(:\\{)", "-");//Replace :{ to -
str=str.replaceAll("[:]", "\":\"");//replace : to ""
str=str.replaceAll("-", ":{");//again replace - to :{
System.out.println(str);

【讨论】:

  • 我没有投反对票,我不知道是谁投了票,为什么投了票,但我至少可以投你的票。
【解决方案2】:

我认为您不是在正确的字符串对象上调用它,而是在String 类上调用它,这将导致错误,因为replaceAll() 不是String 类的静态方法

这对我来说很好用

String str1,str2;
str1 = "Hussain:Akhtar:Wahid:Ghouri";
str2 = str1.replaceAll(":", "\":\"");
System.out.println(str1);
System.out.println(str2);

输出

侯赛因:阿赫塔尔:瓦希德:古里

侯赛因":"阿赫塔尔":"瓦希德":"古里

【讨论】:

  • 我不知道为什么有人反对。虽然无法解决我的问题,但我可能无法在试图使其简单时说清楚,那是我的错。但我刚刚编辑了我的问题,并至少要支持你的答案。
  • @Zarah :thanx 赞成票,将审查您的问题和我的回答,但我仍在等待反对票的回复,对我来说可以学习
  • 1.可能有一个名为String 的变量,所以String.replaceAll(...) 实际上可以编译和运行。 2. 完全有可能String.replaceAll(":", "\":\""); 是一个例子,而String 实际上并不是变量名。 3.程序明显编译运行,否则OP无法发现正在删除的字符。
  • @user3580294 : 1 : 可以声明一个名为 'String' 的变量,但不是预期的,因此我采用了另一种方法,2:我也说她可能调用了错误的对象,3:我自己说它工作得很好,没有任何错误和 OP
  • 我的意思是你的猜测完全无效。如果 OP 尝试将 replaceAll() 作为静态方法调用,则问题将显着不同,因为代码永远不会运行,因此 OP 永远不会发现字符被删除。
猜你喜欢
  • 2011-01-27
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2022-01-18
  • 2019-11-01
  • 1970-01-01
相关资源
最近更新 更多