Taglia l'ultimo carattere da una stringa


Risposte:


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

leggi di più

MODIFICARE:

Quello che ho notato in questo tipo di domande che quasi tutti suggeriscono di rimuovere l'ultimo carattere di una determinata stringa. Ma questo non soddisfa la definizione del metodo Trim.

Taglia: rimuove tutte le occorrenze di caratteri di spazi bianchi dall'inizio e dalla fine di questa istanza.

MSDN-Trim

In base a questa definizione, rimuovere solo l'ultimo carattere dalla stringa è una soluzione errata.

Quindi se vogliamo "Tagliare l'ultimo carattere dalla stringa" dovremmo fare qualcosa del genere

Esempio come metodo di estensione:

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

Nota se si desidera rimuovere tutti i caratteri dello stesso valore, ad es. (!!!!) il metodo sopra rimuove tutte le esistenze di '!' dalla fine della stringa, ma se vuoi rimuovere solo l'ultimo carattere dovresti usare questo:

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

1
Questo è meglio se sai sempre quale personaggio vuoi rimuovere dalla fine della stringa.
Nimrod Shory,

1
Ciao Vash, cosa pensi della mia soluzione usando un RegEx? Soddisfa la richiesta del Thqr ed è in grado di rimuovere il '!' carattere da qualsiasi "mondo!" espressione, ovunque sia posizionata, in una sola riga di codice.
Marcello Faga,

24
-1 Questa soluzione rimuoverà tutti gli stessi caratteri finali! Ad esempio, girerebbe "Ciao !!!!!!!!" in "Ciao", che sta rimuovendo più dell'ultimo carattere.
Kugel,

1
@Kugel, hai perfettamente ragione, e per questo motivo dovresti leggere ancora una volta la mia risposta. Per spiegazione OP non chiedere come rimuovere l'ultimo carattere, ma come tagliarlo.
Damian Leszczyński - Vash

1
@Vash - come si rimuove una singola virgoletta 'usando il metodo "Hello world!". TrimEnd ('! ');
Steam,

65
String withoutLast = yourString.Substring(0,(yourString.Length - 1));

14
Assicurati solo che yourString contenga almeno 1 carattere.
Nimrod Shory,

assicurati anche che la stringa finisca sempre con il carattere che desideri rimuovere EG: "Hello! World" finirà per essere "Hello! Worl".
Nathan Koop,

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

o

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

... nel caso in cui si desideri rimuovere un carattere non bianco dalla fine.


9
Ho votato a favore solo per compensare il downvote senza un commento. Odio quando le persone lo fanno.
Jeff Reddy,

2
Potrebbe essere stato perché non esiste un TrimEnd()metodo e se ci fosse potrebbe far Substring(..)fallire la chiamata successiva su stringhe brevi.
Rory,

7
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');

come lavorare con finisce con proprietà? può essere usato qui?
userAZLogicApps

1
Trim () è così mal chiamato. Taglia tutti i caratteri iniziali e finali (plurale), così come TrimStart () e TrimEnd ()
Antony Booth,


5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));

5

Un altro esempio di taglio dell'ultimo carattere da una stringa:

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

Puoi inserirlo in un metodo di estensione e impedirne la stringa null, ecc.


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

2

potresti anche usare questo:

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

    }

1

Molto facile e semplice:

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


1

Versione leggermente modificata di @Damian Leszczyński - Vash che farà in modo che venga rimosso solo un personaggio specifico.

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

Ho preso il percorso di scrivere un'estensione usando TrimEnd solo perché lo stavo già usando in linea e ne ero contento ... cioè:

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

}

Assicurati di includere lo spazio dei nomi nelle tue classi usando la classe statica; P e l'utilizzo è:

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

0

Un esempio di classe di estensione per semplificare questo: -

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

uso

"!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)

-5

Se vuoi rimuovere il '!' carattere di un'espressione specifica ("mondo" nel tuo caso), quindi puoi usare questa espressione regolare

string input = "Hello! world!";

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

// result: "Hello! world"

il carattere speciale $ 1 contiene tutte le espressioni "mondo" corrispondenti e viene utilizzato per sostituire l'originale "mondo!" espressione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.