假设我的所有单词都用空格分隔,即样本句子:
the browser keeps sending requests to check
我应该匹配tbksrtc
,这是每个单词的第一个字母。正则表达式更好吗?而不是将其拆分为数组(使用空格)。
如果是的话,怎么会写那个正则表达式?
答案 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
一起使用只是一个品味问题。