Java 用空格替换奇数逗号字符

Java 用空格替换奇数逗号字符,java,string,Java,String,如何使用replace函数将奇数位置出现的逗号替换为空格?所以我想把逗号替换为1,3,7,9…作为空格 字符串文本=[[13,68],[134681],[13,6],[17,68],[13,68],[13,681],[135,68],[136,68],[13,68]] 谢谢你抽出时间 输出字符串应该如下所示:我可以使用replace函数两次替换“[”和“]”,但我不明白如何使用“Java”删除逗号的奇数 使用Regex更新1:以下数据具有sql server几何数据类型的X和Y坐标 text=[

如何使用replace函数将奇数位置出现的逗号替换为空格?所以我想把逗号替换为1,3,7,9…作为空格

字符串文本=[[13,68],[134681],[13,6],[17,68],[13,68],[13,681],[135,68],[136,68],[13,68]]

谢谢你抽出时间

输出字符串应该如下所示:我可以使用replace函数两次替换“[”和“]”,但我不明白如何使用“Java”删除逗号的奇数

使用Regex更新1:以下数据具有sql server几何数据类型的X和Y坐标

text=[[148607.1815677256818657.60249623],[147539.268528918617188.04749019],[144563.5263993566817136.65513745],[144921.1542095646818629.77966401],[146841.517476705619929.72166114],[148012.4829150566819763.28604383],[148607.18156772518657.60249623]]

输出:[[148607.181567725 6818657.60249623 147539.268528918 6817188.04749019 144563.526399356 6817136.65513745 144921.154209564 6818629.77966401 146841.517476705 6819929.72166114 148012.482915056 6819763.28604383 148607.181567725 6818657.60249623]]

用空格替换奇数位置出现的逗号

听起来您真正需要的是替换括号之间的逗号。如果是这样,那么使用正则表达式查找这些字符如何

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
System.out.println(s.replaceAll("\\][ ,]+\\[", "] ["));
输出:

[[13, 68] [134**,** 681] [13**,** 6] [17, 68] [13, 68] [13, 681] [135, 68] [136, 68] [13, 68]]]
编辑:

我删除了错误的逗号,下面是一个更新版本:

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
System.out.println(s.replaceAll("\\[([^,]+)[ ,]+([^,]+)\\]", "[$1 $2]"));
输出:

[[13 68], [134** ** 681], [13** ** 6], [17 68], [13 68], [13 681], [135 68], [136 68], [13 68]]]
用空格替换奇数位置出现的逗号

听起来您真正需要的是替换括号之间的逗号。如果是这样,那么使用正则表达式查找这些字符如何

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
System.out.println(s.replaceAll("\\][ ,]+\\[", "] ["));
输出:

[[13, 68] [134**,** 681] [13**,** 6] [17, 68] [13, 68] [13, 681] [135, 68] [136, 68] [13, 68]]]
编辑:

我删除了错误的逗号,下面是一个更新版本:

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
System.out.println(s.replaceAll("\\[([^,]+)[ ,]+([^,]+)\\]", "[$1 $2]"));
输出:

[[13 68], [134** ** 681], [13** ** 6], [17 68], [13 68], [13 681], [135 68], [136 68], [13 68]]]

您可以使用此正则表达式并使用
$1$2
替换捕获的数字

\\[*(\\d+\\W*,\\W*(\\d+\\\]*

\\[*
:零次或多次出现
[

(\\d+)
:捕获一个或多个后来用作替换的数字
$1

\\W*,
:零个或多个非单词字符和

(\\d+)
:第二个捕获组替换为
$2

\\]*
:零次或多次出现
]

    String s = "[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
    String pattern = "\\[*(\\d+)\\W*,\\W*(\\d+)\\]*";
    System.out.println(s.replaceAll(pattern, "$1 $2"));
输出:

13 68, 134 681, 13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68
更新:对于无符号十进制数,可以使用

演示

const regex=/\[*(\d*\?\d+)\d*,\d*(\d*\?\d+)\]*/g;
常量str=`[[13,68],[134**,**681],[13**,**6],[17,68],[13,68],[13,681],[135,68],[136,68],[13,68]]`;
常量str2=`[[148607.1815677256818657.60249623],[147539.268528918617188.04749019],[144563.5263993566817136.65513745],[144921.154209566818629.77966401],[146841.517476705619929.72166114],[148012.4829150566819763.28604383],[148607.1815677256818657.60249623];
const subst=`1$2`;
const result=str.replace(regex,subst);
const result2=str2.replace(regex,subst);
控制台日志(结果);

console.log(result2)您可以使用此正则表达式并使用
$1$2
替换捕获的数字

\\[*(\\d+\\W*,\\W*(\\d+\\\]*

\\[*
:零次或多次出现
[

(\\d+)
:捕获一个或多个后来用作替换的数字
$1

\\W*,
:零个或多个非单词字符和

(\\d+)
:第二个捕获组替换为
$2

\\]*
:零次或多次出现
]

    String s = "[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]";
    String pattern = "\\[*(\\d+)\\W*,\\W*(\\d+)\\]*";
    System.out.println(s.replaceAll(pattern, "$1 $2"));
输出:

13 68, 134 681, 13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68
更新:对于无符号十进制数,可以使用

演示

const regex=/\[*(\d*\?\d+)\d*,\d*(\d*\?\d+)\]*/g;
常量str=`[[13,68],[134**,**681],[13**,**6],[17,68],[13,68],[13,681],[135,68],[136,68],[13,68]]`;
常量str2=`[[148607.1815677256818657.60249623],[147539.268528918617188.04749019],[144563.5263993566817136.65513745],[144921.154209566818629.77966401],[146841.517476705619929.72166114],[148012.4829150566819763.28604383],[148607.1815677256818657.60249623];
const subst=`1$2`;
const result=str.replace(regex,subst);
const result2=str2.replace(regex,subst);
控制台日志(结果);


console.log(result2)到目前为止您都做了些什么?您可以用某物替换“],然后替换其余的逗号,然后替换回“],或者使用正则表达式替换逗号,但不替换“],或者拆分字符串以分离[任何]块并用不同的分隔符重新生成。现在还不清楚结果应该是什么样的inputshow?@Maverick我试过使用replace函数。我最初的要求是删除“[”和“]”,这也是我使用stringreplace函数设法做到的。我会更新我的帖子further@YCF_L:我已经更新了关于输出应该是什么样子的帖子。到目前为止,您做了什么?您能用某物替换“],然后替换其余的逗号,然后替换回“],或者使用正则表达式替换逗号,但不替换“],或者拆分字符串以分隔[任何内容]使用不同的分隔符进行块和重建。现在还不清楚结果应该是什么样的inputshow?@Maverick我试过使用replace函数。我最初的要求是删除“[”和“]”,这也是我使用stringreplace函数设法做到的。我会更新我的帖子further@YCF_L:我已经更新了关于输出的内容。例如,我想用空格替换13和68之间的逗号,并在更新的问题13 68、134 681、13 6、17 68、13 68、13 681、135 68、136 68、13中查看输出68@user3384231哎呀,我换错了逗号。我会编辑答案。没问题……我也试过你的正则表达式,但它给了我“美元后的非法字符串体字符”