0

いくつかのパターンの出現をすべて、一致したパターンから派生したデータに置き換える簡単な方法はありますか?

たとえば、文字列内の数値のすべての出現箇所を、固定長になるように 0 で埋められた同じ数値に置き換えたいとします。

この場合、長さが 4 の場合、ab3cd5になりab0003cd0005ます。

私の考えは、StringBuilder と 2 つのパターンを使用することでした。1 つはすべての数字を取得し、もう 1 つは数字以外のすべてを取得し、一致が見つかったインデックスによってビルダーに一致を追加します。

もっと簡単なものがあるかもしれないと思います。

4

2 に答える 2

2

おそらく、appendReplacementandを使用した後にappendTail、次のようなものを達成できます。

java.util.regex.Pattern をインポートします。java.util.regex.Matcher をインポートします。

String REGEX = "(\\d+)";
String INPUT = "abc3def45";
NumberFormat formatter = new DecimalFormat("0000");

Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
StringBuffer sb = new StringBuffer();
while(m.find()){
    m.appendReplacement(sb,formatter.format(Integer.parseInt(m.group(1))));
}

m.appendTail(sb);

String result = sb.toString();
于 2012-06-10T17:02:56.267 に答える
1

単一の数値の前にいくつのゼロを埋めたいかが正確にわかっている場合は、次のように機能するはずです。

String text = "ab3cd5";
text = text.replaceAll("\\d","0000$0");
System.out.println(text);

さもないと:

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);

StringBuffer result = new StringBuffer();
while(matcher.find()){
    matcher.appendReplacement(result, String.format("%04d", Integer.parseInt(matcher.group()))); 
}
matcher.appendTail(result);
System.out.println(result);

形式%04dは次のことを意味します:長さ4までゼロで埋められた整数。

于 2012-06-10T17:15:44.870 に答える