Ordenação de String avançado

2 respostas
F

Boa tarde pessoal,

Bom estou diante de um problema que venho tentando resolver a um tempinho e nao to vendo uma solução, talvez voces possam me dar uma maozinha, desde ja agradeço.

O problema e o seguinte:
Eu tenho uma avaliaçao para ser montada de forma genérica onde a ordem das perguntas da avaliaçao vem de uma coluna na tabela chamada titulo, ex:.

tabela Pergunta
rowID | titulo | pergunta
0 | 1. | Nome do local
1 | 1.1 | endereço

o problema e quando o titulo chega em 10.1 por exemplo ai ele considera o 10.0 menor que o 5.1 por exemplo, bom para resolver isso transformei tudo em float e ele conseguiu ordenar de forma correta mas ai cai em outro problema, quando o titulo é do tipo 5.1.1, 4.1.2 que no caso nao posso converter pra float.

alguma dica?

abraços…[/code]

2 Respostas

J

Fiz esse codigo aí, talvez ajude, talvez dê pra você dar uma aprimorada nele tambem, pra ficar mais compacto, não analisei muito não:

String[] str = {"1.2", "1.3", "4.1.1", "2.1", "2.3", "4.1.2", "1.1", "4.1.3", "1", "2", "10.1"};
		
Comparator<String> comp = new Comparator<String>(){
   public int compare(String str1, String str2){
      if(str1.equals(str2)){
         return 0;
      }
				
      if(str2.startsWith(str1)){
         return -1;
      }
				
      if(str1.startsWith(str2)){
         return 1;
      }

      String[] partes1 = str1.split("\\.");
      String[] partes2 = str2.split("\\.");
				
      int aux = partes1.length<partes2.length?partes1.length:partes2.length;

      for(int i=0;i<aux;i++){
         int comp = Integer.valueOf(partes1[i]).compareTo(Integer.valueOf(partes2[i]));
         if(comp!=0){
            if(comp>0){
               return 1;
	    }else{
               return -1;
            }
          }
       }

      return -1;
   }
};
		
Arrays.sort(str, comp);
F
Consegui resolver de uma forma meio feia, mas numa proxima versao do uma melhorada nele... vo coloca em baixo o que fiz...
public int compare( Object object1, Object object2 ) throws ComparisonException
	{
				
		NSArray array1 = new NSArray( StringUtils.split( ((Questao)object1).pergunta().titulo(), "." ) );
		NSArray array2 = new NSArray(StringUtils.split(((Questao)object2).pergunta().titulo(), "." ));
		
		for( int i = 0; i < array1.count(); i++ )
		{
			
				Integer int1 = Integer.parseInt( (String) array1.objectAtIndex( i ));
				Integer int2 = Integer.parseInt( (String) array2.objectAtIndex( i ));
				int result = NSComparator.AscendingNumberComparator.compare( int1, int2 );
				if( result != 0 )
				{
					
					return result;
				}

		}
		
		return 0;
	}

Obrigado pela atençao jairelton, vou deixar seu codigo aqui comentado pra uma futura avaliação, é que o tmepo ta curto aqui para uma "simples" ordenação.
abraço.

Criado 24 de novembro de 2006
Ultima resposta 24 de nov. de 2006
Respostas 2
Participantes 2