web-dev-qa-db-fra.com

Couper le dernier caractère d'une chaîne

J'ai une corde dire

"Hello! world!" 

Je veux faire une assiette ou un retrait pour enlever le! hors du monde mais pas hors bonjour.

121
Sphvn
"Hello! world!".TrimEnd('!');

Lire la suite

MODIFIER:

Ce que j'ai remarqué dans ce type de questions, c'est que tout le monde suggère de supprimer le dernier caractère d'une chaîne donnée. Mais cela ne correspond pas à la définition de la méthode Trim.

Couper - Supprime toutes les occurrences de Caractères blancs du début et fin de cette instance.

MSDN-Trim

Sous cette définition, ne supprimer que le dernier caractère de la chaîne est une mauvaise solution. 

Donc, si nous voulons "couper le dernier caractère de la chaîne", nous devrions faire quelque chose comme ceci 

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]);
     }
  }
}

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

else { return str.Remove(str.Length - 1); }
245
String withoutLast = yourString.Substring(0,(yourString.Length - 1));
57
Nimrod Shory
if (yourString.Length > 1)
    withoutLast = yourString.Substring(0, yourString.Length - 1);

ou

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

... au cas où vous voudriez supprimer un caractère non-blanc de la fin.

8
James
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');
6
JDunkerley
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
5
Nissim

Autre exemple de suppression du dernier caractère à partir 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 chaîne nulle, etc.

5
Bronek
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);
3
Jonathan

Essaye ça:

return( (str).Remove(str.Length-1) );
3
M. Hamza Rajput

vous pouvez aussi 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);
        }

    }
2
Omu

Version légèrement modifiée de @Damian Leszczyński - Vash qui garantira que seul un caractère spécifique sera supprimé. 

public static class StringExtensions
{
    public static string TrimLastCharacter(this string str, char character)
    {
        if (string.IsNullOrEmpty(str) || str[str.Length - 1] != character)
        {
            return str;
        }
        return str.Substring(0, str.Length - 1);
    }
}
0

J'ai pris le chemin de l'écriture d'une extension en utilisant le TrimEnd simplement parce que je l'utilisais déjà en ligne et que j'en étais content.

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 à l'aide de la classe static; P et utilisation est:

string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");          
0
Brian Wells

Très facile et simple:

str = str.Remove (str.Length - 1);

0
Behzad Seyfi

Un exemple de classe d'extension pour simplifier ceci: -

internal static class String
{
    public static string TrimEndsCharacter(this string target, char character) => target?.TrimLeadingCharacter(character).TrimTrailingCharacter(character);
    public static string TrimLeadingCharacter(this string target, char character) => Match(target?.Substring(0, 1), character) ? target.Remove(0,1) : target;
    public static string TrimTrailingCharacter(this string target, char character) => Match(target?.Substring(target.Length - 1, 1), character) ? target.Substring(0, target.Length - 1) : target;

    private static bool Match(string value, char character) => !string.IsNullOrEmpty(value) && value[0] == character;
}

Usage 

"!Something!".TrimLeadingCharacter('X'); // Result '!Something!' (No Change)
"!Something!".TrimTrailingCharacter('S'); // Result '!Something!' (No Change)
"!Something!".TrimEndsCharacter('g'); // Result '!Something!' (No Change)

"!Something!".TrimLeadingCharacter('!'); // Result 'Something!' (1st Character removed)
"!Something!".TrimTrailingCharacter('!'); // Result '!Something' (Last Character removed)
"!Something!".TrimEndsCharacter('!'); // Result 'Something'  (End Characters removed)

"!!Something!!".TrimLeadingCharacter('!'); // Result '!Something!!' (Only 1st instance removed)
"!!Something!!".TrimTrailingCharacter('!'); // Result '!!Something!' (Only Last instance removed)
"!!Something!!".TrimEndsCharacter('!'); // Result '!Something!'  (Only End instances removed)
0
Antony Booth