2010-09-29 8 views
0

Je veux fondamentalement vérifier si une partie d'une chaîne commence par une certaine séquence - dans ce cas, ftp: //, ou http: //. Comment ferais-je cela?C# - si les déclarations contre les parties d'une chaîne

Merci

+1

Trop facile ... préparer le déluge! – Polyfun

+0

Relecture de cette question Je me demande si par "* partie d'une chaîne * commence par une certaine séquence", il signifie que la chaîne doit contenir une sous-chaîne qui commence par ftp: //? –

Répondre

12

Utilisez String.StartsWith. Avec seulement deux préfixes possibles, vous pouvez l'écrire comme suit:

if (s.StartsWith("http://") || s.StartsWith("ftp://")) { ... } 

Si vous avez beaucoup de différents préfixes possibles, il pourrait être préférable d'utiliser une boucle ou une expression LINQ à la place. Par exemple:

string[] prefixes = { "http://", "ftp://", /* etc... */ }; 
if (prefixes.Any(prefix => s.StartsWith(prefix))) 
{ 
    // ... 
} 
+1

Belle utilisation de LINQ –

+0

seconded ... Appréciez l'utilisation de LINQ ici – Xander

4
if(myString.StartsWith("ftp://") || myString.StartsWith("http://")) { } 

si vous le souhaitez ignorer le cas utilisez StringComparison.OrdinalIgnoreCase.

if(myString.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase) || myString.StartsWith("http://", StringComparison.OrdinalIgnoreCase)) { } 
+1

Si vous souhaitez ignorer le cas, il serait préférable d'utiliser: myString.StartsWith ("ftp: //", StringComparison.OrdinalIgnoreCase); –

+0

@Dylan - tout à fait raison dans ce scénario, je vais mettre à jour la réponse. –

0

Personnellement, je vous suggère l'utilisation Regex, mais la forme la plus fondamentale est

string myText = @"http://blabla.com"; 
if (myText.IndexOf("http://") == 0 || myText.IndexOf("ftp://") == 0)) 
{ 
//dosome 
} 
+0

Regex ne serait pas moins performant que StartsWith/IndexOf? –

+0

@ Øyvind, dans ce cas, il le ferait probablement, mais dans un cas plus général, il pourrait bien être plus performant, en fonction de la complexité du test requis. –

+0

vrai; la performance va baisser, mais habituellement vous commencez avec .. Je veux savoir de http est une partie de la chaîne .. et vous finissez avec: J'ai besoin de savoir si l'URL est valide – riffnl

1
if(myString.StartsWith("ftp://")){ 
    ... 
} 

similaires si vous voulez vérifier http: //, mais changer le paramètre à StartsWith.