2015-12-01 1 views
0

Je dois vérifier si une chaîne contenant plusieurs mots est au début d'une autre chaîne. Par exemple, j'ai une liste de chaînes contenant des choses comme: "le matin", "le soir", etc, et je veux vérifier si ma chaîne st = "le soir à 5" commence par l'un des Cordes dans ma liste. J'ai besoin d'une réponse booléenne à cela et idéalement un StringTokenizer avec la partie restante "à 5". Mon problème est que maintenant j'ai la chaîne st divisée par un StringTokenizer (j'en avais besoin pour une raison différente), donc je ne peux pas simplement utiliser les méthodes substring ou indexOf pour vérifier si elle est contenue.Vérification de plusieurs éléments avec StringTokenizer en Java

Existe-t-il un moyen simple de le faire? Ou existe-t-il un moyen de convertir à nouveau les éléments restants du Tokenizer en String?

Merci

+0

What_have_you_tried? – Andremoniy

+0

Je n'ai encore essayé aucune solution parce que les seules idées que j'ai eues consistaient à parcourir les jetons et à les vérifier un par un, et je ne savais pas trop comment «revenir en arrière» pour vérifier si j'avais une fausse correspondance. – randombee

+0

Tout d'abord, n'utilisez pas StringTokenizer. Comme le dit [JavaDoc] (http://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html), c'est un héritage qui ne devrait plus être utilisé. Et nous avons aussi besoin de savoir à quoi ressemble votre 'st'. S'il vous plaît partagez votre code. – Tom

Répondre

0

Essayez ceci:

String sStr = "in the morning"; 
String str = "in the morning at 5"; 
List<String> searchStringList = new ArrayList<String>(); 
searchStringList.add(sStr); 

for(String searchString : searchStringList) { 
    if(str.startsWith(searchString)) { 
     return true; 
    } 
} 
+0

Merci. Le problème est que nous devons vérifier des choses comme la veille avant d'arriver au point où nous vérifions cette partie et nous voulons que le reste de la chaîne effectue certaines validations. En outre, nous utilisons les paramètres régionaux, c'est pourquoi ils utilisent le StringTokenizer. – randombee

+1

Quoi qu'il en soit, j'accepte cette réponse car il est préférable d'ajouter les paramètres Locale juste dans le reste de la chaîne de toute façon. Je vais créer le StringTokenizer après avoir effectué cette opération. Donc, juste pour utiliser des chaînes simples et la méthode startsWith comme suggéré. – randombee

1

Peut-être quelque chose comme ça?

private static String[] keys = {"in the morning", "in the evening"}; 

class Hit { 
    String key; 
    String remainder; 
    Hit(String key, String remainder) { 
     this.key = key; 
     this.remainder = remainder; 
    } 
} 

public Optional<Hit> findHit(String input) { 
    for(String key : keys) { 
     if (input.startsWith(key)) { 
      return Optional.of(new Hit(key, input.substring(key.length()))); 
     } 
    } 
    return Optional.empty(); 
} 

EDIT: question pertinente Get Position in Original String from `StringTokenizer`

+0

Très utile aussi, merci – randombee

+1

tnx. C'était un vestige d'utiliser 'indexOf'. –