2014-06-16 7 views
-3

J'appelle Java en utilisant un service Web qui me renvoie des valeurs. Ces valeurs sont des noms d'attribut que j'ai réussi à recevoir. Je mets les valeurs retournées dans la base de données. Par exemple, les valeurs que je Récupéré sont:Problème de comparaison de chaînes Java avec des espaces vides

port DSLAM

Interfejs na ISP

Alors, quand je regarde dans la base de données ces valeurs sont stockées dans DB DSLAM port et Interfejs na ISP. C'est ainsi que je les ai reçus et c'est ainsi qu'ils sont stockés en DB (donc seulement avec un espace vide entre les mots).

Je reçois ces valeurs d'un service Web, mais lorsque je tente de faire une comparaison supplémentaire dans la classe:

if (attribute.trim().equalsIgnoreCase("Interfejs na ISP")) { 
    System.out.println("attr2"); 
} 

ou

if (attribute.trim().equalsIgnoreCase("DSLAM port")) { 
    System.out.println("attr3"); 
} 

Je ne suis pas avoir l'impression système lignes à ma console, if est toujours false. Quel peut être le problème et comment puis-je le résoudre? C'est un comportement vraiment étrange pour moi. Les attributs sont stockés correctement et seulement quand j'essaie de le comparer j'ai un comportement étrange. La clause if n'est jamais true. Peut-il y avoir un problème avec le format de la langue?

De plus, si je tente avec un seul mot:

if (attribute.trim().equalsIgnoreCase("Telefon")) 
        { System.out.println("attr5"); 


        } 

Ensuite, il écrit dans le système Out. donc avec le mot sinlge il semble qu'il n'a pas de problèmes

+0

Essayez 'trim()' sur l'attribut juste pour être sûr. –

+0

Une question stupide: vous avez essayé ceci avec un 'else' et, vous avez vu l'impression alternative, non? – dasblinkenlight

+0

Il existe peut-être des espaces de fin et/ou de début dans la chaîne. essayez 'attribute.trim(). equalsIgnoreCase' – Jens

Répondre

0

sortie une sérialisation du tableau d'octets derrière les valeurs de attribute pour voir exactement ce que les caractères qu'il contient. Cela vous aidera à attraper des choses comme nbsp pour les espaces, etc. Lorsque cela est fait, vous pouvez changer votre chaîne correspondant à ce que vous obtenez réellement de la base de données, ou ajuster votre persistance pour produire des valeurs directes. Il ne suffit pas de simplement imprimer dans la variable, mais plutôt de parcourir tous les segments du tableau et de les sortir en hexadécimal ou en dec - votre sortie cible est quelque chose comme "[44, 53, 4C,. .] ", ce qui correspondrait à" DSL .. ". Pour convertir le tableau d'octets à une représentation hexagonale, vous pouvez utiliser cet extrait, ou comme un exercice, essayez sur votre propre:

public static String convertToHexString(byte[] data) { 
    StringBuffer buf = new StringBuffer(); 
    for (int i = 0; i < data.length; i++) { 
     int nibble = (data[i] >>> 4) & 0x0F; 
     int two_nibbles = 0; 
     do { 
      if ((0 <= nibble) && (nibble <= 9)) 
       buf.append((char) ('0' + nibble)); 
      else 
       buf.append((char) ('a' + (nibble - 10))); 

      nibble = data[i] & 0x0F; 
     } while (two_nibbles++ < 1); 
    } 
    return buf.toString(); 
} 

Maintenant, quand vous avez cette sortie, prenez un ascii table pour rechercher quelles valeurs contenu dans la chaîne et changez vos ifs en fonction de ce qui est réellement contenu dans les chaînes. Peut-être en utilisant une regex correspondante. Les chances sont les espaces blancs sont quelques caractères vierges non-triviaux comme &nbsp; (Hex: A0), mais il est également possible que vous ayez un problème d'encodage. N'hésitez pas à poster les valeurs hexadécimales si les tableaux de caractères n'aident pas.

Questions connexes