2010-08-26 6 views
104

J'ai une chaîne direGarniture dernier caractère d'une chaîne

"Hello! world!" 

Je veux faire une garniture ou enlever pour enlever le! hors monde mais pas éteint Bonjour.

+1

Peut-être est au-delà de votre demande, mais je peux vous demander de prendre un moment pour réfléchir sur l'utilisation du regex i proposé? –

+0

Copie possible de [Supprimer le dernier caractère de la chaîne] (http://stackoverflow.com/questions/7901360/delete-last-char-of-string) –

Répondre

202
"Hello! world!".TrimEnd('!'); 

read more

EDIT:

Ce que j'ai remarqué dans ce type de questions qui suggèrent tout à fait tout le monde pour supprimer le dernier caractère de donnée chaîne. Mais cela ne remplit pas la définition de la méthode Trim.

Trim - Supprime toutes les occurrences de caractères blancs depuis le début et à la fin de cette instance.

MSDN-Trim

En vertu de cette définition supprimant uniquement le dernier caractère de la chaîne est mauvaise solution.

Donc, si nous voulons « Trim dernier caractère de chaîne » nous devrions faire quelque chose comme ça

Exemple comme méthode d'extension:

public static class MyExtensions 
{ 
    public static string TrimLastCharacter(this String str) 
    { 
    if(String.IsNullOrEmpty(str)){ 
     return str; 
    } else { 
     return str.TrimEnd(str[str.Length - 1]); 
    } 
    } 
} 

Remarque si vous voulez supprimer tous les caractères de la même valeur ie (!!!!) la méthode ci-dessus supprime toutes les existences de '!' à partir de la fin de la chaîne, mais si vous voulez supprimer uniquement le dernier caractère vous devez utiliser ceci:

else { return str.Remove(str.Length - 1); } 
+1

Cela vaut mieux tant que vous savez toujours quel caractère vous voulez supprimer de la fin de la chaîne. –

+0

Comme il sed "out the '!", Mais si nous ne savons pas que nous devrions utiliser, 's = s.TrimEnd (s [s.Length - 1]);', en supprimant le dernier char de la chaîne ne pas plein remplissez la définition de Trim. –

+0

Salut Vash, que penses-tu de ma solution en utilisant un RegEx? Il répond à la demande du Thqr et permet de supprimer le '!' char de tout "monde"! expression, partout où l'expression est placée, dans une seule ligne de code. –

51
String withoutLast = yourString.Substring(0,(yourString.Length - 1)); 
+10

Assurez-vous que votre chaîne contient au moins 1 caractère. –

+0

assurez-vous également que votre chaîne se termine toujours par le caractère que vous voulez supprimer EG: "Hello! World" finirait par "Hello! Worl". –

4
string helloOriginal = "Hello! World!"; 
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!')); 
2
string s1 = "Hello! world!" 
string s2 = s1.Substring(0, s1.Length - 1); 
Console.WriteLine(s1); 
Console.WriteLine(s2); 
5
 string s1 = "Hello! world!"; 
     string s2 = s1.Trim('!'); 
+0

Notez que cela supprimerait aussi le '!' à partir du début de la chaîne ... – contactmatt

+0

comment travailler avec finswith propriété? peut-il être utilisé ici? – SaMolPP

-3

Si vous voulez supprimer le '! le caractère d'une expression spécifique (« monde » dans votre cas), vous pouvez alors utiliser cette expression régulière

string input = "Hello! world!"; 

string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline); 

// result: "Hello! world" 

$ 1 caractère spécial contient tous les correspondant « monde » expressions, et il est utilisé pour remplacer l'original " monde!" expression

1

vous pouvez également utiliser ceci:

public static class Extensions 
{ 

     public static string RemovePrefix(this string o, string prefix) 
     { 
      if (prefix == null) return o; 
      return !o.StartsWith(prefix) ? o : o.Remove(0, prefix.Length); 
     } 

     public static string RemoveSuffix(this string o, string suffix) 
     { 
      if(suffix == null) return o; 
      return !o.EndsWith(suffix) ? o : o.Remove(o.Length - suffix.Length, suffix.Length); 
     } 

    } 
0

je pris le chemin de l'écriture d'une extension en utilisant la TrimEnd juste parce que j'utilisais déjà il en ligne et il était heureux avec elle ... savoir:

static class Extensions 
{ 
     public static string RemoveLastChars(this String text, string suffix) 
     {    
      char[] trailingChars = suffix.ToCharArray(); 

      if (suffix == null) return text; 
      return text.TrimEnd(trailingChars); 
     } 

} 

Assurez-vous d'inclure l'espace de noms dans vos classes en utilisant la classe statique P et l'utilisation est:

string _ManagedLocationsOLAP = string.Empty; 
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");   
4

L'autre exemple de coupe dernier caractère d'une chaîne:

string outputText = inputText.Remove(inputText.Length - 1, 1); 

Vous pouvez le mettre dans une méthode d'extension et l'empêcher de la chaîne nulle, etc.

7
if (yourString.Length > 1) 
    withoutLast = yourString.Substring(0, yourString.Length - 1); 

ou

if (yourString.Length > 1) 
    withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1); 

... Si vous souhaitez supprimer un caractère non-blanc de la fin.

+7

je mis à la place de juste pour compenser la downvote sans un commentaire.Cela déteste quand les gens font cela –

+1

Il pourrait avoir été parce qu'il y a pas de méthode 'TrimEnd()' et s'il y en avait, l'appel 'Substring (..)' suivant pourrait échouer sur des chaînes courtes. – Rory

1

Essayez ceci:

return((str).Remove(str.Length-1)); 
Questions connexes