我正在尝试通过获取每个单词的第一个字符及其在句子/段落中的位置来创建地图。
我正在使用正则表达式模式来实现这一目标。
正则表达式是一项昂贵的操作。
有什么方法可以做到这一点?

正则表达式方式:

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

09-04 08:12
查看更多