将奇数号逗号字符替换为空格

时间:2017-03-06 17:28:08

标签: java string

如何使用替换函数将奇数位置的逗号替换为空格?所以我想将1,3,7,9的逗号替换成空格......

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

感谢您的时间。

输出字符串应如下所示:我可以使用替换功能两次来替换" ["和"]"但我不明白如何使用" Java"

删除奇数个逗号
13 68, 134 681,13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68
使用Regex

Update1 :以下数据具有sql server的几何数据类型的X和Y坐标。

文本= [[[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]]]

输出:[[[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]]]

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式并使用$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

更新:对于无符号十进制数,您可以使用

\\[*(\\d*\\.?\\d+)\\D*,\\D*(\\d*\\.?\\d+)\\]*

演示



const regex = /\[*(\d*\.?\d+)\D*,\D*(\d*\.?\d+)\]*/g;

const str = `[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]`;

const str2 = `[[[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]]]`;

const subst = `$1 $2`;
const result = str.replace(regex, subst);
const result2 = str2.replace(regex, subst);
console.log(result);
console.log(result2);




注意:对于签名值

喜欢[[[-148607.181567725, -6818657.60249623], [-147539.268528918, -6817188.04749019],

使用\\[*(-?\\d*\\.?\\d+)\\D*,[^-\\d]*(-?\\d*\\.?\\d+)\\]*

答案 1 :(得分:0)

  

将奇数位置的逗号替换为空格

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

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]]]