获取每个单词的第一个字符及其在句子/段落中的位置

时间:2010-05-11 07:27:13

标签: java regex

我正在尝试通过获取每个单词的第一个字符以及它在句子/段落中的位置来创建地图。 我正在使用正则表达式来实现这一目标。 正则表达式是一项代价高昂的操作。 有没有办法实现这个目标?

正则表达方式:

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());
    }
}

2 个答案:

答案 0 :(得分:0)

的Python:

wmap = {}
prev = 0
for word in "the quick brown fox jumps over the lazy dog".split():
    wmap[word[0]] = prev
    prev += len(word) + 1

print wmap

如果一个字母出现不止一次作为单词的第一个字母,它将映射到最后一个位置。对于所有位置的列表,请更改wmap [word [0]] = prev to:

if word[0] in wmap:
    wmap[word[0]].append(prev)
else:
    wmap[word[0]] = [prev]

答案 1 :(得分:0)

如果你真的需要挤压每一点性能,你可以进行自己的线性扫描:

                 //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链接