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

157

J'ai une chaîne de mots

"Hello! world!" 

Je veux faire une coupe ou un retrait pour retirer le! hors du monde mais pas hors Bonjour.

Sphvn
la source
1
Peut-être que cela dépasse votre demande, mais puis-je vous demander de prendre un moment pour réfléchir à l'utilisation de l'expression régulière que j'ai proposée?
Marcello Faga
1
Double possible de Supprimer le dernier caractère de la chaîne
Tor Klingberg

Réponses:

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

Lire la suite

ÉDITER:

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

Trim - Supprime toutes les occurrences de caractères d'espace blanc du début et de la fin de cette instance.

MSDN-Trim

Selon cette définition, supprimer uniquement 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 devons 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]);
     }
  }
}

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

else { return str.Remove(str.Length - 1); }
Damian Leszczyński - Vash
la source
1
C'est mieux tant que vous savez toujours quel caractère vous voulez supprimer de la fin de la chaîne.
Nimrod Shory
1
Salut Vash, que pensez-vous de ma solution utilisant un RegEx? Il répond à la demande du Thqr et permet de supprimer le '!' char de n'importe quel "monde!" expression, partout où l'expression est placée, dans une seule ligne de code.
Marcello Faga
24
-1 Cette solution supprimera tous les mêmes caractères de fin! Par exemple, cela deviendrait "Bonjour !!!!!!!!" dans "Hello", qui supprime plus que le dernier caractère.
Kugel
1
@Kugel, vous avez tout à fait raison, et c'est pourquoi vous devriez lire une fois de plus ma réponse. Pour l'explication OP, ne demandez pas comment supprimer le dernier caractère, mais comment le couper.
Damian Leszczyński - Vash
1
@Vash - comment supprimer un guillemet simple 'en utilisant la méthode - "Hello! World!". TrimEnd ('! ');
vapeur
65
String withoutLast = yourString.Substring(0,(yourString.Length - 1));
Nimrod Shory
la source
14
Assurez-vous simplement que yourString contient au moins 1 caractère.
Nimrod Shory
assurez-vous également que votre chaîne se termine toujours par le caractère que vous souhaitez supprimer EG: "Hello! World" se terminera par "Hello! Worl".
Nathan Koop
9
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 souhaiteriez supprimer un caractère non blanc à la fin.

James
la source
9
J'ai voté pour juste pour compenser le vote négatif sans commentaire. Déteste quand les gens font ça.
Jeff Reddy
2
C'est peut-être parce qu'il n'y a pas de TrimEnd()méthode et s'il y en avait, cela pourrait faire Substring(..)échouer l'appel suivant sur des chaînes courtes.
Rory
7
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');
JDunkerley
la source
comment travailler avec des fins avec la propriété? peut-il être utilisé ici?
userAZLogicApps
1
Trim () est si mal nommé. Il supprime tous les caractères de début et de fin (pluriel), tout comme TrimStart () et TrimEnd ()
Antony Booth
6

Essaye ça:

return( (str).Remove(str.Length-1) );
M. Hamza Rajput
la source
5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
Nissim
la source
5

L'autre exemple de découpage du 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 d'avoir une chaîne nulle, etc.

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

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

    }
Omu
la source
1

Très facile et simple:

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

Seyfi
la source
1

Version légèrement modifiée de @Damian Leszczyński - Vash qui garantira que seul un personnage 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);
    }
}
Mykhailo Seniutovych
la source
0

J'ai pris le chemin de l'écriture d'une extension en utilisant TrimEnd juste parce que je l'utilisais déjà en ligne et j'en étais satisfait ... c'est-à-dire:

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 statique; P et l'utilisation est:

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

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)
Antony Booth
la source
-5

Si vous souhaitez supprimer 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"

le caractère spécial $ 1 contient toutes les expressions "monde" correspondantes, et il est utilisé pour remplacer le "monde!" d'origine. expression

Marcello Faga
la source