Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_Replace_Insert - Fatal编程技术网

Java 字符串:如何在所有出现的字符周围插入双引号

Java 字符串:如何在所有出现的字符周围插入双引号,java,regex,string,replace,insert,Java,Regex,String,Replace,Insert,我有一个字符串,其中:出现多次。我希望:的每一次出现都用双引号括起来,比如:而不截断它周围的数据 我已尝试使用String.replaceAll:,\:\;但它会截断以下字符: 如何在不截断以下字符的情况下将所有发生的:括起来: 编辑:- 我的字符串:- {key1:value1,key2:value2,key3:{key4:value4,key5:value5,key6:{key7:{key8:value8}}},key9:value9} 更具可读性的表格:- { key1:valu

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

我已尝试使用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}

您的方法工作正常,因为replaceAll将第一个参数作为regExp,第二个参数作为替换字符串

例如:

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

replaceAll不会更改实际字符串,它只返回新替换的字符串

你需要分配它

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);

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

这对我来说很好

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

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

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


但它会截断周围的字符:这意味着什么?有什么例子吗?调用replaceAll没什么错,你是在String类上调用它吗?它不是String类的静态方法,在其他字符串上调用它[status norepro]不是DV'er,但你最初的问题并没有反映它已经演变成什么。因此,这个问题无法重现,总体答案只是在暗箱操作,正确生成json是否比尝试破解它更好?我不知道为什么有人投了反对票。虽然我无法解决我的问题,但我可能无法在试图使其简单化的同时将其弄清楚,这是我的缺点。但我刚刚编辑了我的问题,并准备至少向上投票表决你的答案。@Zarah:thanx对于向上投票,将审查你的问题和我的ans,但我仍在等待向下投票人的回应,这对我来说是值得学习的。可以有一个名为String的变量,所以String.replaceAll。。。实际上可以编译并运行。2.这完全可能是字符串。replaceAll:,\:\;是一个例子,字符串实际上不是变量的名称。3.该程序显然是编译并运行的,否则OP将无法发现字符正在被删除。@user3580294:1:可能会声明一个名为“String”的变量,但这不是预期的。因此,我采用了另一种方法,2:我也在说may她调用了错误的对象,他说:我自己告诉我,它工作得非常好,没有任何错误,我的观点是,你的猜测是完全无效的。如果OP尝试以静态方法调用replaceAll,问题将大不相同,因为代码永远不会运行,所以OP永远不会发现字符被删除。我没有否决,我不知道是谁否决了,为什么否决,但我至少可以否决你的答案。
String str1,str2;
str1 = "Hussain:Akhtar:Wahid:Ghouri";
str2 = str1.replaceAll(":", "\":\"");
System.out.println(str1);
System.out.println(str2);