我正在尝试通过获取每个单词的第一个字符以及它在句子/段落中的位置来创建地图。 我正在使用正则表达式来实现这一目标。 正则表达式是一项代价高昂的操作。 有没有办法实现这个目标?
正则表达方式:
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());
}
}
答案 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}"