假设我所有的单词都用空格分隔,即例句:
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
只是一个口味问题。