coloque todos os caracteres à direita do último traço


114

Eu tenho o seguinte:

string test = "9586-202-10072"

Como eu colocaria todos os caracteres à direita do final, -então 10072. O número de caracteres é sempre diferente à direita do último travessão.

Como isso pode ser feito?

Respostas:


237

Você pode obter a posição do último -com str.LastIndexOf('-'). Portanto, a próxima etapa é óbvia:

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

Correção :

Como Brian afirma abaixo, usar isso em uma string sem traços resultará no retorno da mesma string.


1
Isso funciona mesmo quando o hífen é o último caractere, nesse caso, ele retorna corretamente uma string vazia. Isso só falhará se strfor nulo ou se não contiver nenhum hífen. (No caso em que não há hífen, ele não lança; retorna a string de origem inteira.)
LucasH

@LukeH: Obrigado pelo aviso. Eu não verifiquei e erroneamente assumi que iria jogar.
Jon

3
Bem, LastIndexOfretorna -1 se nada for encontrado (este é um comportamento documentado, portanto, é seguro confiar nele). str.Substring(1-1)dá a você uma string igual a str. Sem surpresas, aqui.
Brian,

2
@ Brian: Acho que bati meu recorde de erros na mesma afirmação trivial. Lição: nunca escreva nada sem revisar o código após o fato. Obrigado.
Jon

57

Você poderia usar o LINQ e evitar a análise explícita:

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

Console.WriteLine(lastFragment);

5
Isso provavelmente economizará mais tempo do desenvolvedor, mas, no caso geral, observe que um código como esse terá muitas alocações de strings (provavelmente quatro no exemplo acima), portanto, pode não ser enfatizado em seções críticas de desempenho.
Charles Burns

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

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

4
se você excluir "+ 1" no final, a saída conterá um caractere especial junto com a string.
Meena,

3

Posso ver que este post foi visto mais de 46.000 vezes. Aposto que muitos dos 46.000 espectadores estão fazendo essa pergunta simplesmente porque querem apenas o nome do arquivo ... e essas respostas podem ser uma toca de coelho se você não puder fazer sua substring literalmente usando o símbolo de arroba.

Se você simplesmente deseja obter o nome do arquivo, há uma resposta simples que deve ser mencionada aqui. Mesmo que não seja a resposta precisa para a pergunta.

result = Path.GetFileName(fileName);

consulte 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

Criei uma extensão de string para isso, espero que ajude.

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;
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.