2017-03-06 7 views
0

置き換え機能を使用して、奇数位置のカンマの表示をスペースで置き換えるにはどうすればよいですか?だから私は1,3,7,9でコンマを置き換えてスペースにする...奇数カンマを空白に置き換えます

文字列text = [[[13,68]、[134,681]、[13,6]、[ [136、68]、[13、68]]

ありがとうございました。

出力文字列は次のように次のようになります。私は交換する関数を2回交換してください使用することができます「[」と「]」が、私は

を「ジャワ」を使用してコンマ奇数の発生を削除する方法を理解していません
13 68, 134 681,13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68 

更新1とRegex:次のデータは、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]]]

+1

あなたはこれまで何をしていますか? – Maverick

+0

あなたは何かで置き換えることができますし、残りのカンマを置き換えてから]に戻すか、正規表現を使用してカンマを置き換えます。]または分割文字列を使用して別々のセパレータで区切ります。入力が何であるかははっきりしていません – Akceptor

+0

結果はどのように見えますか? –

答えて

3

この正規表現を使用して捕捉桁

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

\\[*の代替として$1 $2を使用することができる:[

(\\d+)の0回以上の繰り返し:後で交換$1として使用される1つまたは複数の数字をキャプチャ

\\W*,:0以上の非ワード文字および,

(\\d+)

\\]*$2として交換する第二のキャプチャグループ:の0回以上の繰り返し]

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 

更新:符号なし10進数の場合、あなた使用可能

\\[*(\\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+)\\]*

+0

ありがとう:Javaコードを受け入れるgroovyコンパイラでこのコードを実行していますが、ドル記号の後に不正な文字列の本体文字 解決方法:リテラルドル記号 "\ $ 5"または値式をブラケット " – user3384231

+0

" $ 1 $ 2のような置換リテラルのためのgroovy構文を探しています。これはJavaとデモ(JS)で完璧です。 –

+0

@ user3384231 's.replaceAll(pattern、" \ $ 1 \ $ 2 "));' –

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]]] 
私が間違ってコンマを削除した

は、ここに更新されたバージョンです10

+0

たとえば、13と68の間のコンマをスペースで置き換え、私の更新された質問の出力を参照したいとします。 – user3384231

+0

13 68、134 681,13 6、17 68、13 68、13 681、135 68、136 68、 13 68 – user3384231

+0

@ user3384231 oops、間違ったカンマを置き換えました。私は答えを編集します。 – Malt

関連する問題