Dividir uma String

12 respostas
C

Alguém conhece algum método do java ou java.lang.String que divida uma string, por exemplo: “java metadados” em “java” e “metadados” em strings diferentes. Obrigado

12 Respostas

jgbt

existem varias formas de fazer isso.
a mais simples é usar o metodo split:

String [] array = "java metodo".split(" ");

te retorna uma array com as strings separadas pelo argumento so metodo.
vc tmb pode usar a classe StringTokenizer para fazer isso.
de uma pesquisada no site da sun p/ mais detalhes.

[]'s

Lucas_Teixeira

Acho que StringTokenizer te resolve de um modo um tanto quanto mais elegante.

:stuck_out_tongue:

C

Origado, isso vai me ajudar muito…

cv1

Falando nisso, alguem tem uma comparacaozinha rapida (microbenchmark, mesmo) entre usar split() - com expressoes regulares simples, de no maximo uma ou duas regras - e a mesma coisa feita pelo StringTokenizer? Minha impressao eh de que o split() da um pau nele, pq ja retorna o array prontinho, e nao uma enumeration peh-no-saco. Mas, so vendo… :mrgreen:

Rafael_Steil

E, indepententemente de tudo, spit() eh mais facil de usar :smiley:

Rafael

Lucas_Teixeira

Questão até de gosto… Iterar um Enumeration para mim é muito mais orgasmático iterar que um array…

:wink:

cv1

Orgasmatico. Tai uma boa analise tecnica e fundamentada. Contra isso, nao existem argumentos :mrgreen:

Lucas_Teixeira

:stuck_out_tongue:

split() faria isto?

Lucas Frare de Avelar Teixeira-20 [email removido]

Separaria tanto pelos espacos quanto pelos hifens?

Rafael_Steil

Sim, ja que suporta qualquer expressao regular. Bastaria vc fazer split("[- ]")

Rafael

Lucas_Teixeira

Rafael Steil:
Sim, ja que suporta qualquer expressao regular. Bastaria vc fazer split("[- ]")

Rafael

Bom…

:stuck_out_tongue:

Rubem_Azenha

vivendo e aprendendo…
dessa eu não sabia

T

Bom, se alguém precisa usar JDK 1.3, aqui tem uma função que substitui parcialmente o String.split para o caso mais comum em que há um único caracter separador. Tentei fazê-la a mais rápida possível, mas sempre há alguma oportunidade para otimização.

split (s, ‘#’) equivaleria a s.split ("#", -1)

/**
	 * Quebra uma string, usando o separador indicado.
	 * 
	 * @param cadeia A string a ser quebrada.
	 * @param sep O separador.
	 * @return Um array de strings. Se 'cadeia' for nulo, retorna um array vazio.
	 */
	public static String[] split(String cadeia, char sep) {
		String[] ret;
		if (cadeia == null) {
			ret = new String[0];
		} else {
			int cnt = 0;
			int len = cadeia.length();
			for (int i = 0; i < len; ++i) {
				if (cadeia.charAt(i) == sep) {
					cnt++;
				}
			}
			ret = new String[cnt + 1];
			int ndx = 0, pos = 0;
			int ndx2;
			do {
				ndx2 = cadeia.indexOf(sep, ndx);
				if (ndx2 == -1) {
					ret[pos] = cadeia.substring(ndx, len);
					break;
				} else {
					ret[pos++] = cadeia.substring(ndx, ndx2);
				}
				ndx = ndx2 + 1;
			} while (ndx < len);
			if (ret[pos] == null) {
				ret[pos] = "";
			}
		}
		return ret;
	}
Criado 3 de janeiro de 2005
Ultima resposta 5 de jan. de 2005
Respostas 12
Participantes 7