Java 正規表現ではこれを行うことはできません。String.toUpperCase()
代わりにandを使用して手動で後処理する必要がありtoLowerCase()
ます。
これは、正規表現を使用して、文で少なくとも 3 の長さの単語を見つけて大文字にする方法の例です。
String text = "no way oh my god it cannot be";
Matcher m = Pattern.compile("\\b\\w{3,}\\b").matcher(text);
StringBuilder sb = new StringBuilder();
int last = 0;
while (m.find()) {
sb.append(text.substring(last, m.start()));
sb.append(m.group(0).toUpperCase());
last = m.end();
}
sb.append(text.substring(last));
System.out.println(sb.toString());
// prints "no WAY oh my GOD it CANNOT be"
appendReplacement
と_appendTail
上記のソリューションでは、インデックスなどを使用およびsubstring
管理していることに注意してください。tail
Matcher.appendReplacement
appendTail
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group().toUpperCase());
}
m.appendTail(sb);
がではなく にsb
なっていることに注意してください。オーバーロードを提供するまで、これらのメソッドを使用したい場合は、より遅いものに固執します。StringBuffer
StringBuilder
Matcher
StringBuilder
StringBuffer
効率を下げて可読性を高めるというトレードオフに価値があるかどうかは、あなた次第です。
こちらもご覧ください