1

私のすべての単語が空白で区切られていると仮定すると、つまりサンプル文:

the browser keeps sending requests to check

tbksrtcすべての単語の最初の文字である に一致する必要があります。これは正規表現で行う方が良いですか?配列に分割するのではなく(空白を使用)。

はいの場合、その正規表現をどのように記述しますか?

4

3 に答える 3

2

次の正規表現を使用できます。

(?<=^|\s)\p{L}

これは、空白または文字列の先頭のいずれかが前に付いている場合、文字と一致します。実際にその正規表現をJava文字列に強制するために、放棄してエスケープすることを忘れないでください。

クイックPowerShellテスト:

PS> $s = 'the browser keeps sending requests to check'
PS> -join [regex]::Matches($s, '(?<=^|\s)\p{L}')
tbksrtc
于 2012-09-27T16:25:52.017 に答える
1

非空白を一致させることができます:

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));
}
于 2012-09-27T15:57:19.673 に答える
0

この単純なケースの場合、より読みやすい方法は、文字列を効果的に分割することだと思います。

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のは好みの問題です。

于 2012-09-27T16:21:14.287 に答える