2009-01-14 10 views
3

J'utilise substring et IndexOf pour localiser une valeur dans une chaîne mais mon code ne fonctionne pas si la chaîne (strOldValue) ci-dessous contient une chaîne dans un cas différent. Donc si strOldValue contenait Test ou TEST alors ma sous-chaîne échoue. Comment ajouter ToUpper dans ce scénario? Pardonnez mon ignorance, je suis nouveau à .Net.C# Substring et ToUpper

String strValue = strOldValue.Substring(strOldValue.IndexOf(@"test")); 

Merci C

Répondre

3
String strValue 
    = strOldValue.Substring(strOldValue.ToUpper().IndexOf(@"TEST")); 

Remarque: Je réponds à la question directement posée ("Comment pourrais-je ajouter ToUpper dans ce scénario?").

Ce n'est pas comme ça que je coderais une sous-chaîne insensible à la casse.

La réponse de divo/TheSoftwareJedi est clairement supérieure.

+0

Note: Je réponds directement à la question comme demandé ("Comment ajouter ToUpper dans ce scénario?"). Ce n'est pas comme ça que je coderais une sous-chaîne insensible à la casse. – Portman

+0

Peut-être que la façon de le coder serait utile. Parfois, les questions n00b ne sont pas posées parfaitement vous le savez;) – TheSoftwareJedi

+0

La réponse par divo/TheSoftwareJedi est clairement supérieure. – Portman

16

En utilisant ToUpper, il serait fait comme ceci:

String strValue = strOldValue.Substring(
        strOldValue.ToUpper().IndexOf(@"TEST")); 

Cependant, le plus simple serait de préciser que la comparaison ne doit pas être sensible à la casse:

String strValue = strOldValue.Substring(strOldValue.IndexOf(@"TEST", 
      StringComparison.CurrentCultureIgnoreCase)); 

Le deuxième comparisonType Paramètre de la méthode IndexOf spécifie comment rechercher le paramètre value: en utilisant la culture actuelle ou invariante, en utilisant une casse ou insensible à la casse e recherche, ou en utilisant des règles de comparaison de mots ou ordinales (voir http://msdn.microsoft.com/en-us/library/ms224425.aspx pour la documentation complète).

+0

Je fusionne ma réponse avec la vôtre. Si vous ne l'aimez pas, retournez-le. Je pense que le nôtre combiné est le meilleur – TheSoftwareJedi

+0

J'ai édité pour éviter les barres de défilement horizontales - s'il vous plaît rollback si vous ne voulez pas. –

+0

Ooh c'est mieux :) – Kev

1
strValue.Substring(strValue.IndexOf("TEST", StringComparison.OrdinalIgnoreCase)); 
0

En tant que fan expressions régulières, je voudrais utiliser le code suivant:

String strValue = new Regex("test.*", 
     RegexOptions.IgnoreCase).Match(strOldValue).Value; 
2

En utilisant le String.IndexOf(String,StringComparison) est probablement la meilleure réponse. En utilisant ToUpper() là quelque part crée juste un objet String supplémentaire qui doit être détruit par Garbage Collector. Presque toutes les méthodes de comparaison de chaînes ont une surcharge qui accepte un drapeau qui indique comment faire des comparaisons.