Tokenizing

3 respostas
P

alguém poderia me explicar o q qacontece nesse codigo?!
:?

boolean b2,b;
			int i;
			String s, hits = "";
			String arg = "1 true 34 hi";
			Scanner s1 = new Scanner(arg);
			Scanner s2 = new Scanner(arg);
			while(b = s1.hasNext()){
				s = s1.next();
				hits +="s";
				
			}
			
			while(b = s2.hasNext()){
				if(s2.hasNextInt()){
					i = s2.nextInt();
					hits +="i";
				}else if(s2.hasNextBoolean()){
					b2 = s2.nextBoolean();					
					hits +="b";
				}else{
					s2.next();
					hits+="s2";
				}
				
			}
			
			System.out.println("hits: " + hits);
			
			
			
		}

3 Respostas

ddmizu

Fera, vc ta usando a classe Scanner pra ‘tokenizar’ essa string. O melhor jeito de fazer isso é usando a classe StringTokenizer, que permite umas configurações melhores. Mas assim tbm funciona só q o separador é o espaco ’ '.

Pra entender mais ou menos como os métodos next() e hasNext() funcionam, imagina um cursor antes do D da string “Danilo Mendes”. hasNext() diz se existe em próximo ‘token’, No começo existe (Danilo). E quando a gente usa o método next() ele retorna esse token (Danilo) e coloca o crusor antes do M, e assim por diante.

Agora voltando pro seu caso, no primeiro while para cada token que ele encontrar ele vai adicionar um “s” na String hits.

No segundo while ele pega por tipos. Repara a string arg. Ela tem um inteiro, um boolean, outro inteiro e uma string. E nesse while ele usa os métodos hasInt e hasBoolean que funcionando mais ou menos igual ao hasNext(). A diferença que além de ver se tem um próximo, ele vê se é do tipo que vc precisa. Daí seguindo o while se ele achar um int ele adiciona ‘i’ na string, se ele achar um boolean adiciona ‘b’ e se ele achar qualquer coisa diferente disso ele coloca um ‘s2’ na string.

Blza, campeão?

P

show de bola…

vlw cara, obrigado :smiley:

ddmizu

;D

qqr coisa tâmos ae!

Criado 5 de dezembro de 2007
Ultima resposta 5 de dez. de 2007
Respostas 3
Participantes 2