Como obter os cinco primeiros caracteres de uma String


133

Eu li esta pergunta para obter o primeiro caractere da string. Existe uma maneira de obter o primeiro número n de caracteres de uma seqüência de caracteres em c #?


A pergunta anterior está perguntando sobre char** s e você está perguntando sobre ** caracteres s. Eles não são a mesma coisa. 𣊾e 𣇞há dois caracteres que eu precisava usar ontem, que falharam no software escrito em C # que eu estava usando porque o programador não sabia a diferença entre um chare um caractere. Não caia nessa armadilha!
hippietrail

Respostas:


218

Você pode usar Enumerable .

char[] array = yourStringVariable.Take(5).ToArray();

Ou você pode usar String.Substring .

string str = yourStringVariable.Substring(0,5);

Lembre-se de que isso String.Substringpoderia gerar uma exceção no caso de um comprimento de string menor que os caracteres necessários.

Se você deseja obter o resultado de volta na string, pode usar:

  • Usando String Constructor e LINQ Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

A vantagem com a abordagem não está verificando o comprimento antes da mão.

  • A outra maneira é usar String.Substringcom verificação de erro

gostar:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
string val = nova string (yourStringVariable.Take (6) .ToArray ()); mas Substring irá erro se o comprimento de yourStringVariable for menor que 5
Moji

1
IsNullOrWhiteSpaceestá errado aqui. Considere uma string com 10 espaços em branco - seu código retornará todos os 10. Use IsNullOrEmpty. (Não é bom para combinar IsNullOrWhiteSpacecom qualquer outro teste; Em vez de teste para nulo + vazio, então Trimse isso for especificado comportamento, em seguida, fazer o que testes / operações são necessárias.)
ToolmakerSteve

1
Você pode salvar uma chamada para ToArray () usando String.Concat () assim: string firstFivChar = String.Concat (yourStringVariable.Take (5));
precisa saber é o seguinte


38

Você pode usar Substring (int startIndex, int length)

string result = str.Substring(0,5);

A substring inicia em uma posição de caractere especificada e tem um comprimento especificado. Este método não modifica o valor da instância atual. Em vez disso, ele retorna uma nova seqüência de caracteres com caracteres de comprimento iniciando na posição startIndex na seqüência atual, MSDN

E se a cadeia de origem tiver menos de cinco caracteres? Você receberá uma exceção usando o método acima. Podemos colocar a condição para verificar se o número de caracteres na string é superior a 5 e, em seguida, obter os cinco primeiros através da Substring. Nota: Eu atribuí a string de origem à variável firstFiveChar. O firstFiveChar não muda se os caracteres tiverem menos de 5, portanto, outra parte não é necessária.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

Ninguém mencionou como fazer verificações adequadas ao usar Substring() , então eu queria contribuir com isso.

Se você não quiser usar Linqe seguir adiante Substring(), certifique-se de que sua string seja maior que o segundo parâmetro (comprimento) deSubstring() função.

Digamos que você precise dos 5 primeiros caracteres. Você deve obtê-los com a verificação adequada, assim:

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

Sem essa verificação, Substring() função lançaria uma exceção porque iteraria através de letras que não estão lá.

Eu acho que você entendeu a ideia ...


lovely bit extra de informação
Rob85

Estou feliz que você gostou.
Ilter

Isso me ajudou muito, mas você poderia explicar o que exatamente está fazendo nessa linha?
jimbob

Gostaria de verificar alguns exemplos sobre substring. Leva parâmetros para índices. O índice inicial é 0. Se você escrever algo maior (ou menor, nesse caso) que o último índice de qualquer matriz, receberá uma exceção fora do índice. Essa verificação, no exemplo, é para evitar essa exceção.
Ilter 28/08/19

Hahhahaha! :) Foi uma pergunta que eu respondi. Eu deveria ter deixado essa pergunta sem resposta? :)
ILTER

18

O problema .Substring(,)é que você precisa ter certeza de que a sequência fornecida tenha pelo menos o comprimento do número solicitado de caracteres, caso contrário, uma ArgumentOutOfRangeExceptionserá lançada.

Solução 1 (usando 'Substring'):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

A desvantagem de usar .Substring( é que você precisará verificar o comprimento da string especificada.

Solução 2 (usando 'Take'):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

Usar 'Take' impedirá que você precise verificar o comprimento da string especificada.


13

Use a função PadRight para evitar que a string seja muito curta, pegue o que você precisa e apare os espaços do final em uma única instrução.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
Esta é a melhor solução até agora. Usar apenas Substring pode causar erro quando o comprimento da string é menor que o comprimento da substring.
Asiri Dissanayaka 11/11

melhor alternativa para a função ESQUERDA que usamos no SQL Server
vibs2006 20/01

11

Não sei por que alguém mencionou isso. Mas é a maneira mais curta e simples de conseguir isso.

string str = yourString.Remove(n);

n - número de caracteres que você precisa

Exemplo

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
Internamente, é o mesmo que "this.Substring (0, 5)", portanto, é necessário garantir que a string tenha o comprimento adequado.
PersyJack

No caso em que você deseja os primeiros n caracteres, isso funcionará apenas se você souber o comprimento da sequência. Se o comprimento puder mudar, isso nem sempre funcionará. Eu sei que é provavelmente óbvio para a maioria, mas apenas mencioná-lo para qualquer um que passa por ...
user1289451

10

Anexe cinco caracteres de espaço em branco, depois corte os cinco primeiros e apare o resultado. O número de espaços anexados deve corresponder ao número que você está cortando. Certifique-se de incluir os parênteses antes .Substring(0,X)ou não anexará nada.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

Com esta técnica, você não precisará se preocupar com o ArgumentOutOfRangeExceptionmencionado em outras respostas.


1
caramba eu ia postar isso !! votado. (é 2019, por que não pode haver um método em string que faça o que Mid $ fez em 1985? Para aqueles que dizem 'você não deve fazer isso' OK, você vem escrever meu código para mim ... você terá que Faça isso ...)
FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
erro se o comprimento da variável "str" ​​for menor que 5
Moji

6

Apenas um aviso, há uma nova maneira de fazer isso no C # 8.0: operadores de intervalo

Docs da Microsoft

Ou como eu gosto de chamá-los, fatias de pandas.

À moda antiga:

string newString = oldstring.Substring(0, 5);

Nova maneira:

string newString = oldstring[..5];

Que, à primeira vista, parece uma troca muito ruim de legibilidade para código mais curto, mas o novo recurso oferece

  1. uma sintaxe padrão para fatiar matrizes (e, portanto, cadeias)
  2. coisas legais como esta:

    var fatia1 = lista [2 .. ^ 3]; // lista [Range.Create (2, Index.CreateFromEnd (3))]

    var fatia2 = lista [.. ^ 3]; // lista [Range.ToEnd (Index.CreateFromEnd (3))]

    var fatia3 = lista [2 ..]; // lista [Range.FromStart (2)]

    var fatia4 = lista [..]; // lista [Range.All]


3

Para obter o primeiro número n de caracteres de uma string em C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

Abaixo está um método de extensão que verifica se uma string é maior que o necessário e encurta a string para a quantidade máxima definida de caracteres e acrescenta '...'.

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

Eu uso:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

ou alternativa, se você quiser verificar também o espaço em branco (em vez de apenas nulo):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

Ou você pode usar String.ToCharArray () .
Toma int startindexe e int lengthcomo parâmetros e retorna umchar[]

new string(stringValue.ToCharArray(0,5))

Você ainda precisa garantir que a string tenha o comprimento adequado; caso contrário, ela lançará um ArgumentOutOfRangeException


1

Tente este código quando str for menor que 5.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

Se quisermos apenas os 5 primeiros caracteres de qualquer campo, isso poderá ser alcançado pelo Atributo Esquerdo

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

Eu tentei as respostas acima e o melhor que eu acho que é esse

@item.First_Name.Substring(0,1)

Neste eu poderia obter a primeira letra da string

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.