Come ottenere i primi cinque caratteri di una stringa


133

Ho letto questa domanda per ottenere il primo carattere della stringa. C'è un modo per ottenere il primo n numero di caratteri da una stringa in C #?


La domanda precedente sta ponendo domande su char** se stai chiedendo informazioni su ** caratteri . Non sono la stessa cosa. 𣊾e 𣇞sono due personaggi che dovevo usare proprio ieri e che non sono riusciti nel software scritto in C # che stavo usando perché il programmatore non conosceva la differenza tra un chare un personaggio. Non cadere in questa trappola!
hippietrail

Risposte:


218

Puoi usare Enumerable. Prendi come:

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

Oppure puoi usare String.Substring .

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

Ricorda che String.Substringpotrebbe generare un'eccezione in caso di lunghezza della stringa inferiore ai caratteri richiesti.

Se vuoi riavere il risultato in stringa, puoi usare:

  • Utilizzo di String Constructor e LINQ's Take

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

Il vantaggio con l'approccio non sta controllando la lunghezza prima della mano.

  • L'altro modo è utilizzare String.Substringcon il controllo degli errori

piace:

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

3
string val = new string (yourStringVariable.Take (6) .ToArray ()); ma la sottostringa genererà un errore se la lunghezza di yourStringVariable è inferiore a 5
Moji

1
IsNullOrWhiteSpaceè sbagliato qui. Considera una stringa con 10 spazi vuoti - il tuo codice restituirà tutti i 10. Usa IsNullOrEmptyinvece. (Non è buono combinare IsNullOrWhiteSpacecon qualsiasi altro test; Invece test per null + vuoto, quindi Trimse questo è il comportamento specificato, quindi fare qualsiasi test / operazione siano necessari.)
ToolmakerSteve

1
Puoi salvare una chiamata a ToArray () usando String.Concat () in questo modo: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

È possibile utilizzare Sottostringa (int startIndex, int length)

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

La sottostringa inizia in una posizione di carattere specificata e ha una lunghezza specificata. Questo metodo non modifica il valore dell'istanza corrente. Al contrario, restituisce una nuova stringa con caratteri di lunghezza a partire dalla posizione startIndex nella stringa corrente, MSDN

Cosa succede se la stringa di origine è inferiore a cinque caratteri? Otterrai un'eccezione utilizzando il metodo sopra. Possiamo mettere la condizione per verificare se il numero di caratteri nella stringa è superiore a 5, quindi ottenere i primi cinque tramite Sottostringa. Nota Ho assegnato la stringa di origine alla variabile firstFiveChar. Il primo FiveChar non cambia se i caratteri sono inferiori a 5, quindi parte non è richiesta.

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

29

Nessuno ha menzionato come effettuare controlli adeguati durante l'utilizzo Substring(), quindi ho voluto contribuire al riguardo.

Se non vuoi usare Linqe andare avanti Substring(), devi assicurarti che la tua stringa sia più grande del secondo parametro (lunghezza) della Substring()funzione.

Diciamo che hai bisogno dei primi 5 caratteri. Dovresti ottenerli con un controllo adeguato, in questo modo:

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

// firstFiveChars: "love" (4 characters)

Senza questo controllo, la Substring()funzione genererebbe un'eccezione perché ripeterebbe le lettere che non c'erano.

Penso che tu abbia avuto l'idea ...


informazioni extra adorabili
Rob85,

Sono contento che ti sia piaciuto.
ilter

Questo mi ha aiutato molto, ma potresti spiegare cosa sta facendo esattamente in quella linea?
jimbob,

Vorrei controllare alcuni esempi sulla sottostringa. Prende i parametri per gli indici. L'indice iniziale è 0. Se si scrive qualcosa di più grande (o più piccolo, per quella materia) rispetto all'ultimo indice di qualsiasi array, si ottiene un'eccezione fuori indice. Tale controllo, nell'esempio serve per evitare tale eccezione.
ilter

Hahhahaha! :) È stata una domanda a cui ho risposto. Avrei dovuto lasciare quella domanda senza risposta? :)
ilter

18

Il problema .Substring(,)è che devi essere sicuro che la stringa data abbia almeno la lunghezza del numero richiesto di caratteri, altrimenti ArgumentOutOfRangeExceptionverrà lanciata una stringa .

Soluzione 1 (usando 'Sottostringa'):

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

Lo svantaggio dell'uso .Substring(è che dovrai controllare la lunghezza della stringa specificata.

Soluzione 2 (usando 'Take'):

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

L'uso di "Take" impedisce di controllare la lunghezza della stringa specificata.


13

Utilizzare la funzione PadRight per evitare che la stringa sia troppo corta, afferrare ciò che è necessario, quindi tagliare gli spazi dalla fine tutto in una sola istruzione.

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

1
Questa è la soluzione migliore finora. L'uso solo del sottostringa può causare errori quando la lunghezza della stringa è inferiore alla lunghezza della sottostringa.
Asiri Dissanayaka,

la migliore alternativa per la funzione SINISTRA che utilizziamo in SQL Server
vibs2006,

11

Non so perché qualcuno ne abbia parlato. Ma è il modo più breve e semplice per raggiungere questo obiettivo.

string str = yourString.Remove(n);

n - numero di caratteri necessari

Esempio

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

3
Questo è internamente lo stesso di "this.Substring (0, 5)", quindi è necessario assicurarsi che la stringa abbia la lunghezza corretta.
PersyJack,

Nel caso in cui desideri i primi n caratteri, questo funziona solo se conosci la lunghezza della stringa. Se la lunghezza può cambiare, questo non funzionerà sempre. So che è probabilmente ovvio per la maggior parte, ma menzionarlo solo per chiunque passi ...
user1289451

10

Aggiungi cinque caratteri spazi bianchi, quindi taglia i primi cinque e taglia il risultato. Il numero di spazi che aggiungi deve corrispondere al numero che stai tagliando. Assicurati di includere la parentesi prima .Substring(0,X)o non aggiungerai nulla.

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

Con questa tecnica non dovrai preoccuparti del ArgumentOutOfRangeExceptionmenzionato in altre risposte.


1
dannazione stavo per postare quello !! upvoted. (è il 2019, perché non può esserci un metodo su stringa che fa quello che Mid $ ha fatto nel 1985? Per quelli che dicono 'non dovresti farlo' OK, vieni a scrivere il mio codice per me ... dovrai fallo ...)
FastAl,

7
string str = "GoodMorning"

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

2
errore se la lunghezza della variabile "str" ​​è inferiore a 5
Moji

6

Solo un avvertimento c'è un nuovo modo per farlo in C # 8.0: operatori di gamma

Microsoft Docs

O come mi piace chiamarli, fette di panda.

Vecchio modo:

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

Nuovo modo:

string newString = oldstring[..5];

Che a prima vista appare come un compromesso piuttosto negativo di una certa leggibilità per codice più breve, ma la nuova funzionalità ti dà

  1. una sintassi standard per lo slicing di array (e quindi le stringhe)
  2. cose interessanti come questa:

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

    var slice2 = list [.. ^ 3]; // list [Range.ToEnd (Index.CreateFromEnd (3))]

    var slice3 = list [2 ..]; // list [Range.FromStart (2)]

    var slice4 = list [..]; // list [Range.All]


3

Per ottenere il primo n numero di caratteri da una stringa in C #

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

2

Di seguito è riportato un metodo di estensione che controlla se una stringa è più grande di quanto necessario e accorcia la stringa alla quantità massima definita di caratteri e aggiunge '...'.

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

Io uso:

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

o alternativa se si desidera controllare anche Whitespace (anziché solo Null):

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

1

Oppure potresti usare String.ToCharArray () .
Prende int startindexe e int lengthcome parametri e restituisce achar[]

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

Dovresti comunque assicurarti che la stringa abbia la lunghezza corretta, altrimenti lancerà a ArgumentOutOfRangeException


1

Si prega di provare questo codice quando str è inferiore a 5.

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

0

Se vogliamo solo i primi 5 caratteri di qualsiasi campo, questo può essere ottenuto con l'attributo sinistro

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


-3

Ho provato le risposte sopra e il migliore penso sia questo

@item.First_Name.Substring(0,1)

In questo ho potuto ottenere la prima lettera della stringa

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.