2015-09-30 2 views
0

J'essaie de sous-traiter mais je reçois des exceptions.Sous-chaîne dans C#

my string "currentUserLogin" is uponet\\xyz 

donc ce que je veux résultat final est xyz

string currentUser = currentUserLogin.Substring(currentUserLogin.LastIndexOf("'\'")); 
+2

Trop de citations. Vous n'avez besoin que des guillemets simples – rmn36

+0

Quelle exception obtenez-vous? Pourquoi ne pas le poster ici? – Alpay

+0

cela ne fonctionne pas avec single! Je suppose que c'est pourquoi est l'erreur de lancer – toxic

Répondre

3

Essayez:

string currentUser = currentUserLogin.Substring(currentUserLogin.LastIndexOf("\\") + 1); 

Je tiens également à souligner que vous voulez une gestion des erreurs réelles. Cela lancera un IndexOutOfRangeException si le \ vient à la fin de la chaîne.

documentation pertinente: https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

+0

qui renvoie un \ xyz wierd, puisque nous demandons le dernier? –

+0

@lonewolf fixe. – MarkPflug

+0

Cool :) et non, aucune erreur vient de tester, les index sont basés sur zéro et la sous-chaîne n'est pas, il utilise la posiotion réelle dans la chaîne 1,2,3 etc, donc l'ajout du 1 le convertit efficacement :) ... Il suffit de tester moi-même –

1

Cela fonctionne ici comme un charme

 string currentUserLogin = "uponet\\xyz"; //Login 
     string[] currentUserParts = currentUserLogin.Split('\\');// splits in parts of [uponet],[],[xyz] 
     string currentUser = currentUserParts[currentUserParts.Count() - 1]; // get last from array 

\ est un charector d'échappement afin de debout un seul le compilateur ne sais pas quoi faire avec elle, la bonne façon à utiliser par exemple:

  • \ r qui est une nouvelle ligne
  • \\ qui se traduisent à \

et ainsi de suite

Hope this helps :)

2

moyen plus sûr de le faire est de vérifier si elle est dans la première chaîne, ou vérifier si index > -1.

int index = currentUserLogin.LastIndexOf('\\'); 
if (index > -1) 
{ 
    if (index + 1 == currentUserLogin) 
    { 
     currentUser = string.Empty; 
    } 
    else 
    { 
     currentUser = currentUserLogin.SubString(index + 1); 
    } 
} 
+0

Cette solution est probablement plus souhaitable que d'attraper une exception. Il y a un surcoût qui vient avec la gestion des exceptions. Voir post sur C# essayer/catch overhead: http://stackoverflow.com/questions/52312/what-is-the-real-overhead-of-try-catch-in-c – iCode

+0

Cela lancera toujours une exception si le \ est à la fin de la chaîne. – MarkPflug

+0

C'est vrai, je vais ajouter un test pour ça –