Suponha que eu tenha uma string:
"34234234d124"
Eu quero obter os últimos quatro caracteres dessa string, que é "d124"
. Eu posso usar SubString
, mas ele precisa de algumas linhas de código, incluindo nomear uma variável.
É possível obter esse resultado em uma expressão com c #?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. Espero que uma versão futura do C # facilite isso."hello world"[^4..]
:-)Respostas:
Se você tem certeza de que o comprimento da sua string é pelo menos 4, é ainda mais curto:
fonte
mystring
tiver menos de 4 caracteres.Você pode usar um método de extensão :
E depois chame:
fonte
Tudo o que tem a fazer é..
fonte
Ok, então vejo que esta é uma postagem antiga, mas por que estamos reescrevendo o código que já é fornecido na estrutura?
Sugiro que você adicione uma referência à DLL de estrutura "Microsoft.VisualBasic"
fonte
VisualBasic
espaço para nome?TextFieldParser
é outro exemplo. Por que esses utilitários são fatorados de maneira tão estranha?fonte
Usar Substring é realmente bastante curto e legível:
fonte
Aqui está outra alternativa que não deve ter um desempenho muito ruim (devido à execução adiada ):
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Embora um método de extensão para esse fim
mystring.Last(4)
seja claramente a solução mais limpa, ainda que um pouco mais trabalhoso.fonte
Reverse().Take(4).Reverse()
cada um não enumera toda a string, isso só acontece naToArray
chamada final . Se não houvesse algo como execução adiada, seria traduzido paraReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Obviamente, isso pressupõe que essas extensões sejam do tipo adiado - que eu não verifiquei. Os construtores String não aceitam IEnumerable, portanto, você deve enumerá-lo em uma matriz nesse momento.Você pode simplesmente usar o
Substring
método de c #. Por ex.Retornará o resultado 0000.
fonte
startIndex
?Uma solução simples seria:
fonte
fonte
=
não quis dizer=+
.É apenas isso:
fonte
Comparado a algumas respostas anteriores, a principal diferença é que esse trecho de código leva em consideração quando a sequência de entrada é:
Aqui está:
fonte
Definição:
Uso:
Resultado:
do
fonte
Isso não falhará em nenhuma sequência de comprimento.
Provavelmente, isso é um exagero para a tarefa em questão, mas, se houver necessidade de validação adicional, ela poderá ser adicionada à expressão regular.
Edit: Eu acho que este regex seria mais eficiente:
fonte
Use um genérico
Last<T>
. Isso funcionará com QUALQUERIEnumerable
, incluindo string.E um específico para string:
fonte
Juntei alguns códigos modificados de várias fontes que obterão os resultados desejados e farão muito mais. Eu permiti valores int negativos, valores int que excedem o comprimento da string e que o índice final seja menor que o índice inicial. Nesse último caso, o método retorna uma substring de ordem inversa. Há muitos comentários, mas deixe-me saber se algo não está claro ou é apenas louco. Eu estava brincando com isso para ver para que tudo o que eu poderia usar.
Portanto, se você tiver uma string como "Este é um método de extensão", aqui estão alguns exemplos e resultados esperados.
Espero que esta versão seja útil para alguém. Funciona da mesma maneira que o normal, se você não usa números negativos, e fornece padrões para parâmetros fora de alcance.
fonte
fonte
supondo que você desejasse as seqüências entre uma sequência que está localizada a 10 caracteres do último caractere e você precisa de apenas 3 caracteres.
Digamos
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
Acima, preciso extrair o
"273"
que utilizarei na consulta ao banco de dadosfonte
Substring
já permite que você passe em um ponto inicial e comprimento, então não saiba por que você não usaria isso em vez de usarRemove
para remover o início primeiro.A atualização 2020 : C # 8.0 finalmente facilita isso:
Você também pode dividir matrizes da mesma maneira, consulte Índices e intervalos .
fonte