2010-06-07 6 views
3

je besoin d'aide pour couper tout dans ma chaîne jusqu'à la fin après qu'il rencontre le premier « \ 0 »besoin de couper une chaîne jusqu'à la fin après une combinaison particulière de caractères

Alors:

« test \ 1 \ 2 \ 3 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0_asdfgh_qwerty_blah_blah_blah »

devient

"test \ 1 \ 2 \ 3"

J'utilise C#. De l'aide serait grandement appréciée.

Merci.

+0

Essayez un remplacement d'expression régulière: 's/^ ([^ \ 0] +) \ 0 */1 $ /' devrait fonctionner.. Malheureusement, je ne connais pas assez mon C# pour le taper sans le regarder. –

+2

Est-ce un '(char) 0' échappé ou la chaîne littérale' "\ 0" '? –

+0

Matt: Je vais essayer votre remplacement regex. Merci. – bits

Répondre

6

Que diriez-vous:

string s = "test\1\2\3\0\0\0\0\0\0\0\0\0_asdfgh_qwerty_blah_blah_blah"; 

int offset = s.IndexOf("\\0"); 
if (offset >= 0) 
    s = s.Substring(0, offset); 
+1

Que faire si une chaîne d'entrée ne contient pas une telle sous-chaîne? Il lancera une exception – abatishchev

+0

s = s.Substring (0, Math.Max ​​(0, s.IndexOf ("\\ 0")); –

+2

Cela est également incorrect, puisque le second argument de 'Substring' est la longueur. 'd want' Math.Max ​​(s.Length, s.IndexOf ("\\ 0") '. –

5
if (someString.Contains("\\0")) 
    someString = someString.Substring(0, someString.IndexOf("\\0")); 
+0

Que se passerait-il si vous n'aviez pas" si " – VoodooChild

+1

@VoodooChild: 'IndexOf' renverra -1 si la chaîne d'origine ne contient pas de sous-chaîne et cela va rompre' Substring' – abatishchev

+0

@Anthony: Aussi vous peut utiliser '(@" \ 0 ")' pour rendre le code plus lisible – abatishchev

0
String.Substring(0, String.IndexOf("\0")) 
1

Trouver la position de la première occurrence de « \ 0 » et faire une autre chaîne qui est une sous-chaîne vous originale du début à la position du première occurrence.

+0

Je ferais mieux d'obtenir un vote up pour l'explication réfléchie au lieu de simplement jeter la réponse sur le conseil lol .... – VoodooChild

0
if (origString.IndexOf(@"\0") != -1) { 
    newString = origString.Substring(0, origString.IndexOf(@"\0"); 
} else { 
    newString = origString; 
} 
+0

Je vois que je suis t le seul qui a pris en compte le cas où il n'y a pas de '\ 0 'dans la chaîne :) –

0

La valeur de correspondance retournée par l'expression rationnelle suivante devrait être ce que vous êtes après aussi bien (comme alternative à la méthode substring), au fond, il commence à la chaîne de début et aussi longtemps que les deux caractères suivants aren » t \0 il élargit le match:

^(?:(?!=\0).)+ 
1

somestring=Regex.split(somestring,"\\0")[0];