あなたは後読みベースの正規表現の中に\G
を使用することができます。
String abc = "12-10 23 5555 8361";
String hello = abc.replaceAll("[^a-zA-Z0-9]", "");
System.out.println(hello.replaceAll("(?<=\\G\\d{3})", "-"));
// => 121-023-555-583-61
はIDEONE demo
(?<=\\G\\d{3})
正規表現は、開始時の位置に一致するだけでゼロ幅アサーションが含まれています参照してください。文字列または最後に成功したマッチ(\G
)の最後に3桁の数字(\d{3}
)が続きます。 Javaの正規表現では、このパターンは現在のシナリオで正常に機能します(つまり、\G
は見た目の内側から正規表現インデックスを移動します)。しかし、これはAndroidではうまくいきません。
UPDATE:
更新要件について、あなたは正規表現が失敗終わりに(?!$)
で更新されanother IDEONE demo
を参照してください
public static void main (String[] args) throws java.lang.Exception
{
String s = "0 - 22 1985--324"; // => 022-198-53-24
run(s);
s = "555372654"; // => 555-372-654
run(s);
s = "12-10 23 5555 8361"; // => 121-023-555-583-61
run(s);
}
public static void run(String abc) {
String hello = abc.replaceAll("[^a-zA-Z0-9]", "");
hello = hello.replaceAll("(?<=\\G\\d{3})(?!$)", "-");
System.out.println(hello.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3"));
}
のようないくつかのステップのアプローチを使用することができます文字列の最後に一致します。
.replaceAll("\\b(\\d{2})(\\d+)-(\\d)$", "$1-$2$3")
最後に2桁のグループを並べ替える必要があります.3桁以上の数字の後にハイフンを1桁だけ入力する場合は、最初の2桁の後にハイフンを移動し、このハイフンの直後に他の数字を移動します。
あなたは私たちに、文字列になるべきかの例を与えることができますか? – Druzion
期待される出力は? '12-10'はどうですか? –
上記サンプルの期待値は121-023-555-583-61ですか? –