porta tutti i caratteri a destra dell'ultimo trattino


114

Ho il seguente:

string test = "9586-202-10072"

Come farei ad ottenere tutti i caratteri a destra dell'ultimo -trattino in modo da 10072. Il numero di caratteri è sempre diverso a destra dell'ultimo trattino.

Come si può fare?

Risposte:


237

Puoi ottenere la posizione dell'ultimo -con str.LastIndexOf('-'). Quindi il passaggio successivo è ovvio:

var result = str.Substring(str.LastIndexOf('-') + 1);

Correzione :

Come afferma Brian di seguito, l'uso di questo su una stringa senza trattini comporterà la restituzione della stessa stringa.


1
Funziona anche quando il trattino è l'ultimo carattere, in tal caso restituisce correttamente una stringa vuota. Questo fallirà solo se uno dei due strè nullo o se non contiene affatto un trattino. (Nel caso in cui non ci sia un trattino non viene generato; restituisce l'intera stringa di origine.)
LukeH

@ LukeH: Grazie per l'avvertimento. Non ho controllato e ho pensato erroneamente che sarebbe stato lanciato.
Jon

3
Bene, LastIndexOfrestituisce -1 se non viene trovato nulla (questo è un comportamento documentato, quindi è sicuro fare affidamento su di esso). str.Substring(1-1)ti dà una stringa uguale a str. Nessuna sorpresa, qui.
Brian

2
@ Brian: Penso di aver battuto il mio record per la maggior parte degli errori nella stessa banale affermazione. Lezione: non scrivere mai nulla senza aver corretto il codice dopo il fatto. Grazie.
Jon

57

Potresti usare LINQ e risparmiarti l'analisi esplicita:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
Questo probabilmente farà risparmiare la maggior parte del tempo allo sviluppatore, ma nel caso generale si noti che codice come questo avrà molte allocazioni di stringhe (probabilmente quattro nell'esempio sopra), quindi potrebbe essere ridotto di enfasi nelle sezioni critiche per le prestazioni.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

4
se escludi "+ 1" alla fine, l'output conterrà un carattere speciale insieme alla stringa.
Meena

3

Vedo che questo post è stato visto oltre 46.000 volte. Scommetto che molti dei 46.000 spettatori stanno facendo questa domanda semplicemente perché vogliono solo il nome del file ... e queste risposte possono essere una tana di coniglio se non puoi rendere la tua sottostringa alla lettera usando il segno at.

Se vuoi semplicemente ottenere il nome del file, c'è una semplice risposta che dovrebbe essere menzionata qui. Anche se non è la risposta precisa alla domanda.

result = Path.GetFileName(fileName);

vedere https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

Ho creato un'estensione di stringa per questo, spero che aiuti.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
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.