私のすべての単語が空白で区切られていると仮定すると、つまりサンプル文:
the browser keeps sending requests to check
tbksrtc
すべての単語の最初の文字である に一致する必要があります。これは正規表現で行う方が良いですか?配列に分割するのではなく(空白を使用)。
はいの場合、その正規表現をどのように記述しますか?
次の正規表現を使用できます。
(?<=^|\s)\p{L}
これは、空白または文字列の先頭のいずれかが前に付いている場合、文字と一致します。実際にその正規表現をJava文字列に強制するために、放棄してエスケープすることを忘れないでください。
クイックPowerShellテスト:
PS> $s = 'the browser keeps sending requests to check'
PS> -join [regex]::Matches($s, '(?<=^|\s)\p{L}')
tbksrtc
非空白を一致させることができます:
String str = "the browser keeps sending requests to check";
Matcher m = Pattern.compile("(\\S)(\\S+)").matcher(str);
while (m.find()) {
System.out.print(m.group(1));
}
この単純なケースの場合、より読みやすい方法は、文字列を効果的に分割することだと思います。
public String generateInitials (String original){
String[] words= original.split(" ");
return retrieveInitialsOfEachWord(words);
}
private String retrieveInitialsOfEachWord(String[] words){
String initials = "";
for(String word : words){
initials += word.substring(0,1);
}
return initials;
}
実際、これらの数行は、正規表現をデコードしてライターの意図を推測するよりもはるかに理解しやすいものです。
開発者がメソッド名で意図をうまく明らかにしていない場合、期待どおりに正規表現をデコードするのは難しいかもしれません。
とにかく、基本的なJava構文を使用したり、正規表現を使用したりするMatcher
のは好みの問題です。