Preciso mapear os tokens (palavras) de dada frase para um array de String mas não sei como utilizar uma regexp correta para splitar corretamente para o array. Do jeito que fiz, ele pega o espaço em branco pós-separadores (vírgulas, dois-pontos e afins) e considera como um token também. Fiz uma "gambiarra" para corrigir.
Fiz o seguinte:public class MapeadoraFrase {
private static final String REGEX = "\\,|\\;|\\:|\\.|\\?|\\!|\\ ";
private String frase;
private String[] tokens;
private Map<Integer, Character> separadores;
public MapeadoraFrase(String frase) {
tokens = frase.split(REGEX);
for (int i=0; i < tokens.length; i++)
tokens[i] = tokens[i].replaceAll(" ", "");
}
public void exibirTokens() {
for (int i = 0; i < tokens.length; i++)
Main.print(String.format("[%d] \'%s\'", i, tokens[i]));
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
new MapeadoraFrase("Esta, é uma frase: a ser tokenizada.").exibirTokens();
}
public static void print(Object obj) {
System.out.println(obj);
}
}
Note que, ao comentar o "FOR" do construtor os espaços em branco são considerados como palavras e vão para o array. Como filtro isso sem gambiarras?
Grato desde já.
