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 回答