Ajuda com código

12 respostas
P

Boa tarde, eu tenho o seguinte código:

String texto = txtCodigo.getText(); String token[] = texto.split(" "); int pos = token.length; int i; for(i=0;i<=pos-1;i++) { if(token[i].equals("String")) { txtSaida.setText(txtSaida.getText()+"String"+"\n"); } }

O meu sistema tem que pegar o valor que está na variavel texto(que possui mais de uma linha) e separar os tokens, depois comparar se for igual a String envia a mensagem.

Quando eu digito apenas um String o resultado da certo, mas quando eu digito mais de um String não aparece nada e deveria aparecer o tanto de String que eu digitei

12 Respostas

M

Não necessáriamente… o split divide a frase a partir de uma expressão regular (no caso, o espaço). Se você digita:

o método não fará coisa alguma, uma vez que o split retornou a frase inteira e essa frase não é igual a “String”. Agora, se você digitar:

o método imprimirá 4 vezes a mensagem, já que o array retornado pelo split conteria algo como:

peczenyj

O que isso imprime?

for(i=0;i<=pos-1;i++)  { txtSaida.setText("token["+i+"] : <" + token[i] + ">\n");}
P

Acho que não expliquei claramente.
Eu quis dizer que quando eu digito:
String String
String

A saída deveria ser:
String
String
String

mas aparece somente um String na saída e deveria sair três String

P

Esse código abaixo, quando as palavras String estão na primeira linha, imprime certo. Mas quando eu tenho a palavra String em mais de uma linha, não imprime nada

1. for(i=0;i<=pos-1;i++)  { txtSaida.setText("token["+i+"] : <" + token[i] + ">\n");}
M

Eis o problema: existem dois separadores diferentes: o espaço e o caracter de quebra de linha. Tavez você tivesse que quebrar todas as linhas, para depois, em cada linha, quebrar a partir dos espaços.

peczenyj

Se estão em mais de uma linha provavelmente o problema é no split por espaço em branco :wink:

String String
String

é, na verdade
<String String\nString>

uma solucao é fazer o split por qq coisa q não seja caracteres

texto.split("[^a-zA-Z]");

ou, alguem me corrija

texto.split("\W");
P

Entao, eu ja tentei fazer isso, mas não consegui, se alguém saber como fazer, por favor me ajude

M

[quote=peczenyj]Se estão em mais de uma linha provavelmente o problema é no split por espaço em branco :wink:

String String
String

é, na verdade
<String String\nString>

uma solucao é fazer o split por qq coisa q não seja caracteres

texto.split("[^a-zA-Z]");

ou, alguem me corrija

texto.split("\W");

Exato! Bem pensado. Ou ainda usando a sequência para caracteres em branco “\s”(inclui os caracteres " " “\t” “\n” “\x” “0B” “\f” “\r”):

texto.split("\s");

Mais sobre regex em: http://java.sun.com/docs/books/tutorial/essential/regex/pre_char_classes.html

peczenyj

http://java.sun.com/docs/books/tutorial/essential/regex/

http://java.sun.com/docs/books/tutorial/essential/regex/pattern.html

Leia sobre isso, talvez seja o seu problema:
Pattern.MULTILINE Enables multiline mode. In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence. Multiline mode can also be enabled via the embedded flag expression (?m).

Po, vai testando ai :wink:

P

Usando o

texto.split("\s");

deu certo :lol:
o \s quer dizer que ele vai separar o token por tudo que tiver " " “\t” “\n” “\x” “0B” “\f” “\r”?

M

Exatamente. Todos os caracteres de espaçamento (o próprio espaço, a quebra de linha, a tabulação, etc.).

P

Obrigado pela ajuda de todos

Criado 6 de fevereiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 12
Participantes 3