2016-07-18 1 views
-1

substring J'ai une chaîne:chaîne contient la méthode return false, même si la chaîne contient

20160719_P_BID_20160718_130000

Je dois vérifier si cette chaîne contient la sous-chaîne "BID". J'ai essayé différentes méthodes comme:

  1. .contains("BID")/.contains("_BID_")
  2. .indexOf("BID")
  3. .substring(11,14).equals("BID)

mais toutes les méthodes ont retourné false même si la sortie des chaînes ne contient la chaîne "BID" et est la chaîne "BID"

Mise à jour:

String fileName = file.getFileName(); 
String tradeTypeStr = fileName.substring(11,14);   
if(tradeTypeStr.equalsIgnoreCase(tradeType)) 

Quelqu'un peut-il expliquer pourquoi les méthodes retournent fausses?

Merci pour votre aide!

+0

Afficher un peu plus de votre code s'il vous plaît. Je viens de lancer '" 20160719_P_BID_20160718_130000 ".contains (" BID ")' et le résultat est "true" –

+0

Avez-vous essayé de copier la chaîne exacte et de la coller dans le code? –

+0

. La méthode .contains devrait fonctionner. Souhaitez-vous publier le code exact avec lequel vous avez testé? – hadilq

Répondre

2

Depuis String.contains() et String.indexOf() fonctionne vraiment, cela sonne comme vous pouvez avoir un problème avec l'encodage. Essayez

String fileName = file.getName(); 
    for (char c : fileName.toCharArray()) 
    { 
     System.out.println(c + " : " + Integer.toHexString(c)); 
    } 

Si vous ne trouvez pas quelque chose comme

_ : 5f 
B : 42 
I : 49 
D : 44 
_ : 5f 

vous avez la raison de votre problème

+0

Merci! vous avez été très utile! – user1889849

0

Test cette

String fileName = file.getName(); 

if(fileName.contains(tradeTypeStr)) 
+0

essayé cela. ça ne marche pas. – user1889849

+0

Peut-être que vous changez votre langue de clavier en tapant "BID"! Pourriez-vous utiliser copier et coller à partir de la variable de débogage de fileName? Ça devrait marcher. – hadilq

+0

merci hadilq! ça marche maintenant! – user1889849