2013-04-11 20 views
68

Ho letto questo question to get first char della stringa. C'è un modo per ottenere il primo numero n di caratteri da una stringa in C#?Come ottenere i primi cinque caratteri di una stringa

+0

La domanda precedente si riferisce a ** 'char' ** se si sta chiedendo di ** carattere ** s. Non sono la stessa cosa. '' e '' sono due caratteri che dovevo usare solo ieri che non funzionavano nel software scritto in C# che stavo usando perché il programmatore non conosceva la differenza tra un 'char' e un carattere. Non cadere in questa trappola! – hippietrail

risposta

126

È possibile utilizzare Enumerable.Take come:

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

Oppure si può usare String.Substring.

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

Ricordate che String.Substring potrebbe generare un'eccezione in caso di normali condizioni di stringa minore dei caratteri richiesti.

Se si desidera ottenere il risultato di nuovo nella stringa allora si può usare:

  • Utilizzando stringa del costruttore e di LINQ Take

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

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

  • L'altro modo è quello di utilizzare String.Substring con il controllo degli errori

come:

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

stringa val = nuova stringa (yourStringVariable.Take (6) .ToArray()); ma la sottostringa genera un errore se la lunghezza di yourStringVariable è inferiore a 5 – Moji

+0

'IsNullOrWhiteSpace' è errato qui. Considera una stringa con 10 spazi vuoti - il tuo codice restituirà tutti 10. Usa invece 'IsNullOrEmpty '. (Non è bene combinare 'IsNullOrWhiteSpace' con altri test, ma testare null + empty, quindi' Trim' se questo è il comportamento specificato, quindi fare qualunque test/operazioni sono necessari.) – ToolmakerSteve

24

È possibile utilizzare Substring(int startIndex, int length)

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

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

Che cosa succede se la stringa di origine è inferiore a cinque caratteri? Otterrete un'eccezione usando il metodo sopra. Possiamo mettere le condizioni per verificare se il numero di caratteri nella stringa è maggiore di 5, quindi ottenere i primi cinque tramite Sottostringa. Nota Ho assegnato la stringa di origine alla variabile firstFiveChar. Il primoFiveChar non cambia se i caratteri sono meno di 5, quindi la parte non è richiesta.

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

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

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

14

Il problema con .Substring(,) è, che è necessario per essere sicuri che la stringa data ha almeno la lunghezza del il numero di caratteri richiesto, altrimenti verrà generato un numero ArgumentOutOfRangeException.

Soluzione 1 (utilizzando 'Substring'):

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

Lo svantaggio di usare .Substring( è che è necessario controllare la lunghezza della stringa data.

Soluzione 2 (usando 'Take'):

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

Utilizzando 'Take' impedirà è necessario controllare la lunghezza della stringa data.

1

Di seguito è un metodo di estensione che controlla se una stringa è più grande di ciò che era necessario e riduce la stringa per l'importo massimo definito 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; 
    } 
} 
17

nessuno ha menzionato come fare controlli adeguati quando si utilizza Substring(), così ho voluto contribuire a tale proposito.

Se non si desidera utilizzare Linq e andare con Substring(), è necessario fare in modo che la stringa è più grande del secondo parametro (lunghezza) di Substring() funzione.

Supponiamo che siano necessari i primi 5 caratteri. Si dovrebbe ottenere loro con 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, Substring() funzione sarebbe un'eccezione perché sarebbe iterare attraverso le lettere che non ci sono.

Penso che si ottiene l'idea ...

+0

un bel po 'di informazioni aggiuntive – Rob85

+0

Sono contento che ti sia piaciuto. – ilter

+0

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

11

Non so perché qualcuno ha menzionato questo. Ma è il modo più semplice e semplice per raggiungere questo obiettivo.

string str = yourString.Remove(n); 

n - numero di caratteri che è necessario

Esempio

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

Questo è internamente uguale a "this.Substring (0, 5)", quindi è necessario assicurarsi che la stringa abbia la lunghezza corretta. – PersyJack

-2

Prova sottostante Codice

string Name = "Abhishek"; 
string firstfour = Name.Substring(0, 4); 
Response.Write(firstfour); 
+0

Questo non è diverso da questa risposta http://stackoverflow.com/a/15942016/6198927 e questo http://stackoverflow.com/a/15942008/6198927 –

-2

ho cercato le risposte di cui sopra e la migliore secondo me è questo uno

@item.First_Name.Substring(0,1) 

In questo ho potuto ottenere la prima lettera della stringa

3

Append cinque caratteri di spaziatura poi tagliati fuori i primi cinque e tagliare il risultato. Il numero di spazi da aggiungere deve corrispondere al numero che stai tagliando. Assicurati di includere la parentesi prima di .Substring(0,X) o non aggiungerai nulla.

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

Con questa tecnica non dovrete preoccuparvi della ArgumentOutOfRangeException detto in altre risposte.

0

io uso:

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

o alternativo, se si desidera verificare la presenza di spazi bianchi troppo (anziché soltanto Null):

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

Oppure si potrebbe usare String.ToCharArray().
Prende int startindex ed e int length come parametri e restituisce un char[]

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

Si avrebbe ancora bisogno di assicurarsi che la stringa ha la giusta lunghezza, altrimenti lancerà una ArgumentOutOfRangeException

1

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); 
0

Utilizzare la funzione PadRight per evitare che la stringa di essere troppo breve, afferrare w cappello di cui hai bisogno quindi tagliare gli spazi dalla fine tutti in una dichiarazione.

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