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.
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.
Réponses:
"Hello! world!".TrimEnd('!');
É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.
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); }
String withoutLast = yourString.Substring(0,(yourString.Length - 1));
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.
TrimEnd()
méthode et s'il y en avait, cela pourrait faire Substring(..)
échouer l'appel suivant sur des chaînes courtes.
string s1 = "Hello! world!";
string s2 = s1.Trim('!');
Essaye ça:
return( (str).Remove(str.Length-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);
}
}
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);
}
}
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(",");
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)
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