匹配每个单词的第一个字符

时间:2012-09-27 15:53:40

标签: java regex

假设我的所有单词都用空格分隔,即样本句子:

the browser keeps sending requests to check

我应该匹配tbksrtc,这是每个单词的第一个字母。正则表达式更好吗?而不是将其拆分为数组(使用空格)。

如果是的话,怎么会写那个正则表达式?

3 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式:

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

如果前面有空格或字符串的开头,则匹配一个字母。不要忘记放弃以实际强制将该正则表达式转换为Java字符串。

快速PowerShell测试:

PS> $s = 'the browser keeps sending requests to check'
PS> -join [regex]::Matches($s, '(?<=^|\s)\p{L}')
tbksrtc

答案 1 :(得分: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));
}

答案 2 :(得分: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语法或将regexp与Matcher一起使用只是一个品味问题。