0

私は次のようなものを変換する必要があります"foo_bar_baz_2""fooBarBaz2"

私はこのパターンを使おうとしています:

Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

matcher最初にキャプチャされたグループ(「_」の後の文字)を大文字でキャプチャされたグループに置き換えるために使用することはできますか?

4

3 に答える 3

3

はい。置換-Java\U$1\E文字列のように表されます"\\U$1\\E"

正規表現に他に何もない限り、をダンプして\Eに短縮できます\U$1


@TimPietzckerのコメントを考慮に入れると、正規表現自体はになります"_([a-z0-9])"

于 2011-07-20T12:15:51.023 に答える
3

次のように、マッチャーのappendReplacement/appendTailメソッドを使用できます。

Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase());
}
matcher.appendTail(stringBuffer);

System.out.println(stringBuffer.toString());
于 2011-07-20T12:20:07.600 に答える
1
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);
于 2011-07-20T12:19:14.240 に答える