У меня есть Set
из character
разделителей (DELIMITERS
), например .
,
и т.д. С помощью этого я хочу, чтобы разделить текст и получить слова с их позицией в тексте.
String.split()
работает нормально, если вы хотите только слова. То же самое с StringTokenizer
. Написал какой-то простой способ справиться с этим, но, может быть, есть лучший способ достичь этого результата?Текста токенизатора - извлечение слова и позиция из текста
public List<String> extractWords(String text){
List<String> words = new ArrayList<>();
List<WordPos> positions = new ArrayList<>();
int wordStart = -1;
for(int i=0; i < text.length(); i++){
if(DELIMITERS.contains(text.charAt(i))){
if(wordStart >=0){ //word just ended
String word = text.substring(wordStart, i);
positions.add(new WordPos(wordStart, i));
words.add(word);
}
wordStart = -1;
}else{ //not delimiter == valid word
if(wordStart < 0){ //word just started
wordStart = i;
}
}
}
return words;
}
// inner static class for words positions
public static class WordPos{
int start;
int end;
public WordPos(int start, int end){
this.start = start;
this.end = end;
}
}
Я думаю, вы должны опубликовать это на http://codereview.stackexchange.com/ – Matt