Mam do powiedzenia ciąg
"Hello! world!"
Chcę przyciąć lub usunąć, aby wyjąć! poza światem, ale nie poza światem Witam.
Mam do powiedzenia ciąg
"Hello! world!"
Chcę przyciąć lub usunąć, aby wyjąć! poza światem, ale nie poza światem Witam.
Odpowiedzi:
"Hello! world!".TrimEnd('!');
EDYTOWAĆ:
To, co zauważyłem w tego typu pytaniach, to że całkiem każdy sugeruje usunięcie ostatniego znaku z danego ciągu. Ale to nie spełnia definicji metody przycinania.
Przytnij - usuwa wszystkie wystąpienia białych znaków z początku i końca tej instancji.
Zgodnie z tą definicją usunięcie tylko ostatniego znaku z łańcucha jest złym rozwiązaniem.
Więc jeśli chcemy „Przyciąć ostatni znak z łańcucha”, powinniśmy zrobić coś takiego
Przykład jako metoda rozszerzenia:
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]);
}
}
}
Zauważ , że jeśli chcesz usunąć wszystkie znaki o tej samej wartości, tj. (!!!!) powyższa metoda usuwa wszystkie istnienia '!' od końca ciągu, ale jeśli chcesz usunąć tylko ostatni znak, użyj tego:
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);
lub
if (yourString.Length > 1)
withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);
... na wypadek, gdybyś chciał usunąć z końca znak niebędący białymi znakami.
TrimEnd()metody i gdyby tak było, mogłoby to spowodować Substring(..)niepowodzenie kolejnego wywołania na krótkich ciągach.
string s1 = "Hello! world!";
string s2 = s1.Trim('!');
Spróbuj tego:
return( (str).Remove(str.Length-1) );
możesz również użyć tego:
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);
}
}
Nieznacznie zmodyfikowana wersja @Damian Leszczyński - Vash, która zapewni usunięcie tylko określonej postaci.
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);
}
}
Podjąłem ścieżkę pisania rozszerzenia za pomocą TrimEnd tylko dlatego, że już używałem go w tekście i byłem z niego zadowolony ... tj:
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);
}
}
Upewnij się, że umieszczasz przestrzeń nazw w swoich klasach przy użyciu klasy statycznej; P, a użycie to:
string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");
Przykładowa klasa rozszerzenia, aby to uprościć: -
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;
}
Stosowanie
"!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)
Jeśli chcesz usunąć znak „!” znaku z określonego wyrażenia (w twoim przypadku „świata”), możesz użyć tego wyrażenia regularnego
string input = "Hello! world!";
string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline);
// result: "Hello! world"
znak specjalny $ 1 zawiera wszystkie pasujące wyrażenia „świat” i jest używany do zastąpienia oryginalnego słowa „świat!” wyrażenie