String line="<inicio>mensagem 1<fim><inicio>mensagem 2<fim><inicio>mensagem 3<fim>";
// Expressao para pegar sequencia: <inicio> "letras, numeros e espacos" <fim>:
Pattern pat = Pattern.compile("(<inicio>((\\w|\\s)*)<fim>)", Pattern.DOTALL);
Matcher mat = pat.matcher(line);
while (mat.find()) {
// metodo group retorna subgrupos de acordo com parenteses da expressao:
System.out.println("Grupo value: " + mat.group(2));
// metodos start e end retornam indices do resultado:
System.out.println("Result value: " + line.substring(mat.start(), mat.end()));
}
Pra fazer gambiarra dá pra ir correndo letra a letra identificando padrões. Mas acho que a melhor opção ai é você trocar essa string estranha para XML.
jidlafe, eu uso JDK 6u13 (a mais recente que encontrei) e continua na mesma a sua sugestão (ela funciona em J2ME??)
ctdaa, tentei sua sugestão mas estou com erro com Pattern e Matcher (eles funcionam em J2ME??)
ricoldi, meu problema é com J2ME sim, mas então, eu recebo essas strings nesse formato ja. Como vc disse (e eu ja havia mencionado acima) minha intenção é tentar correr letra a letra, mas não sei como é a sintaxe em J2ME. Vc saberia me ajudar???
vixi… desculpe a mancada… não tem mesmo as classes Matcher e Pattern no JavaME. Ia sugerir Scanner… mas também não tem… que pobre!
Então acho que a melhor sugestão foi mesmo usar o XML, se voce conseguir mudar um pouco sua string para "mensagem 1mensagem 2, vai ficar fácil.
Se não der para mudar a string então o jeito é mesmo percorrer a string e ir guardando os caracteres, com este exemplo que também já foi sugerido (trocando o split pela lógica abaixo.), algo assim:
String s="<inicio>mensagem 1<fim><inicio>mensagem 2<fim>";
StringBuffer token = new StringBuffer;
Boolean isMsg;
for(int i = 0; i <= s.length(); i++){
token.append(s.charAt(i));
if ( ! isMsg ) {
if (token.toString().equals("<inicio>")) {
isMsg=true;
token=new StringBuffer;
}
} else {
...
}
}