我正在尝试通过获取每个单词的第一个字符及其在句子/段落中的位置来创建地图。
我正在使用正则表达式模式来实现这一目标。
正则表达式是一项昂贵的操作。
有什么方法可以做到这一点?
正则表达式方式:
public static void getFirstChar(String paragraph) {
Pattern pattern = Pattern.compile("(?<=\\b)[a-zA-Z]");
Map newMap = new HashMap();
Matcher fit = pattern.matcher(paragraph);
while (fit.find()) {
newMap.put((fit.group().toString().charAt(0)), fit.start());
}
}
最佳答案
如果您确实需要压缩每一个性能,则可以进行自己的线性扫描:
//0123456789012345678901
String text = "Hello,my name is=Helen";
Map<Character,Integer> map = new HashMap<Character,Integer>();
boolean lastIsLetter = false;
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
boolean currIsLetter = Character.isLetter(ch);
if (!lastIsLetter && currIsLetter) {
map.put(ch, i);
}
lastIsLetter = currIsLetter;
}
System.out.println(map);
// prints "{n=9, m=6, H=17, i=14}"
API链接
Character.isLetter