So erhalten Sie die ersten fünf Zeichen eines Strings


133

Ich habe diese Frage gelesen , um das erste Zeichen der Zeichenfolge zu erhalten. Gibt es eine Möglichkeit, die ersten n Zeichen aus einer Zeichenfolge in C # abzurufen?


Die vorherige Frage fragt nach char** s und Sie fragen nach ** Zeichen . Sie sind nicht dasselbe. 𣊾und 𣇞sind zwei Zeichen, die ich erst gestern verwenden musste, was in der in C # geschriebenen Software, die ich verwendet habe, fehlgeschlagen ist, weil der Programmierer den Unterschied zwischen einem charund einem Zeichen nicht kannte . Fallen Sie nicht in diese Falle!
Hippietrail

Antworten:


218

Sie können Enumerable verwenden. Nehmen Sie wie folgt :

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

Oder Sie können String.Substring verwenden .

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

Denken Sie daran, dass String.Substringdies eine Ausnahme auslösen kann, wenn die Länge der Zeichenfolge geringer ist als die erforderlichen Zeichen.

Wenn Sie das Ergebnis wieder in einer Zeichenfolge erhalten möchten, können Sie Folgendes verwenden:

  • Verwenden von String Constructor und LINQs Take

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

Das Plus beim Ansatz ist, dass die Länge nicht vorher überprüft wird.

  • Die andere Möglichkeit ist die String.SubstringFehlerprüfung

mögen:

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

3
Zeichenfolge val = neue Zeichenfolge (yourStringVariable.Take (6) .ToArray ()); aber Teilzeichenfolge wird Fehler, wenn die Länge Ihrer StringVariable weniger als 5 ist
Moji

1
IsNullOrWhiteSpaceist hier falsch. Stellen Sie sich eine Zeichenfolge mit 10 Leerzeichen vor - Ihr Code gibt alle 10 zurück. Verwenden Sie IsNullOrEmptystattdessen. (Es ist nicht gut, IsNullOrWhiteSpacemit einem anderen Test zu kombinieren . Testen Sie stattdessen auf null + leer. TrimWenn dies das angegebene Verhalten ist, führen Sie alle erforderlichen Tests / Operationen aus.)
ToolmakerSteve

1
Sie können einen Aufruf von ToArray () mit String.Concat () wie folgt speichern: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Sie können Teilzeichenfolge verwenden (int startIndex, int length)

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

Der Teilstring beginnt an einer bestimmten Zeichenposition und hat eine bestimmte Länge. Diese Methode ändert den Wert der aktuellen Instanz nicht. Stattdessen wird eine neue Zeichenfolge mit Längenzeichen ab der Position startIndex in der aktuellen Zeichenfolge MSDN zurückgegeben

Was ist, wenn die Quellzeichenfolge weniger als fünf Zeichen enthält? Sie erhalten eine Ausnahme, wenn Sie die obige Methode verwenden. Wir können eine Bedingung setzen, um zu überprüfen, ob die Anzahl der Zeichen in der Zeichenfolge mehr als 5 beträgt, und dann die ersten fünf durch Teilzeichenfolge erhalten. Hinweis Ich habe der Variablen firstFiveChar eine Quellzeichenfolge zugewiesen. Das firstFiveChar ändert sich nicht, wenn die Zeichen kleiner als 5 sind. Andernfalls ist kein Teil erforderlich.

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

29

Niemand erwähnte, wie man bei der Verwendung die richtigen Kontrollen durchführt Substring(), deshalb wollte ich dazu beitragen.

Wenn Sie nicht verwenden Linqund mitmachen möchten Substring(), müssen Sie sicherstellen, dass Ihre Zeichenfolge größer als der zweite Parameter (Länge) der Substring()Funktion ist.

Angenommen, Sie benötigen die ersten 5 Zeichen. Sie sollten sie mit der richtigen Prüfung erhalten, wie folgt:

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

// firstFiveChars: "love" (4 characters)

Ohne diese Überprüfung Substring()würde die Funktion eine Ausnahme auslösen, da sie Buchstaben durchläuft, die nicht vorhanden sind.

Ich denke du kommst auf die Idee ...


schöne zusätzliche Informationen
Rob85

Ich bin froh, dass es dir gefallen hat.
ilter

Das hat mir sehr geholfen, aber können Sie erklären, was genau es in dieser Zeile tut?
Jimbob

Ich würde einige Beispiele über Teilzeichenfolgen überprüfen. Es werden Parameter für Indizes benötigt. Der Startindex ist 0. Wenn Sie etwas Größeres (oder auch Kleineres) als den letzten Index eines Arrays schreiben, erhalten Sie eine Ausnahme außerhalb des Index. Diese Prüfung dient im Beispiel dazu, diese Ausnahme zu vermeiden.
ilter

Hahhahaha! :) Es war eine Frage, die ich beantwortet habe. Sollte ich diese Frage unbeantwortet lassen? :)
ilter

18

Das Problem dabei .Substring(,)ist, dass Sie sicherstellen müssen, dass die angegebene Zeichenfolge mindestens die Länge der angeforderten Anzahl von Zeichen hat, da sonst eine Zeichenfolge ArgumentOutOfRangeExceptionausgelöst wird.

Lösung 1 (unter Verwendung von "Teilstring"):

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

Der Nachteil der Verwendung .Substring(besteht darin, dass Sie die Länge der angegebenen Zeichenfolge überprüfen müssen.

Lösung 2 (mit 'Take'):

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

Die Verwendung von 'Take' verhindert, dass Sie die Länge der angegebenen Zeichenfolge überprüfen müssen.


13

Verwenden Sie die PadRight-Funktion, um zu verhindern, dass die Zeichenfolge zu kurz ist. Nehmen Sie das, was Sie benötigen, und schneiden Sie die Leerzeichen am Ende in einer Anweisung ab.

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

1
Dies ist die bisher bessere Lösung. Die Verwendung nur von Teilzeichenfolgen kann zu Fehlern führen, wenn die Länge der Zeichenfolge geringer als die Länge der Teilzeichenfolge ist.
Asiri Dissanayaka

beste Alternative für die LINKE Funktion, die wir in SQL Server verwenden
vibs2006

11

Ich weiß nicht, warum das jemand erwähnt hat. Dies ist jedoch der kürzeste und einfachste Weg, um dies zu erreichen.

string str = yourString.Remove(n);

n - Anzahl der Zeichen, die Sie benötigen

Beispiel

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

3
Dies ist intern dasselbe wie "this.Substring (0, 5)", daher müssen Sie sicherstellen, dass der String die richtige Länge hat.
PersyJack

In einem Fall, in dem Sie die ersten n Zeichen möchten, funktioniert dies nur, wenn Sie die Länge der Zeichenfolge kennen. Wenn sich die Länge ändern kann, funktioniert dies nicht immer. Ich weiß, dass das für die meisten wahrscheinlich offensichtlich ist, aber ich erwähne es nur für jeden, der vorbeikommt ...
user1289451

10

Fügen Sie fünf Leerzeichen hinzu, schneiden Sie die ersten fünf ab und schneiden Sie das Ergebnis ab. Die Anzahl der angehängten Leerzeichen sollte mit der Anzahl übereinstimmen, die Sie schneiden. Stellen Sie sicher, dass Sie die Klammern vorher .Substring(0,X)einfügen, da Sie sonst nichts anhängen.

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

Mit dieser Technik müssen Sie sich keine Gedanken über die ArgumentOutOfRangeExceptionin anderen Antworten genannten machen.


1
verdammt, ich wollte das posten !! upvoted. (Es ist 2019, warum kann es keine Methode für Zeichenfolgen geben, die das tut, was Mid $ 1985 getan hat? Für diejenigen, die sagen, dass Sie das nicht tun sollten, OK, kommen Sie und schreiben Sie meinen Code für mich ... Sie müssen mach es ...)
FastAl

7
string str = "GoodMorning"

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

2
wird Fehler, wenn die Länge der Variablen "str" ​​kleiner als 5 ist
Moji

6

Nur einen Kopf hoch gibt es eine neue Möglichkeit, dies in C # 8.0 zu tun: Bereichsoperatoren

Microsoft Docs

Oder wie ich sie gerne nenne, Pandas Scheiben.

Alter Weg:

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

Neuer Weg:

string newString = oldstring[..5];

Was auf den ersten Blick wie ein ziemlich schlechter Kompromiss zwischen Lesbarkeit und kürzerem Code erscheint, aber die neue Funktion bietet Ihnen

  1. eine Standardsyntax zum Schneiden von Arrays (und damit von Strings)
  2. coole Sachen wie diese:

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

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

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

    var Slice4 = Liste [..]; // liste [Range.All]


3

Um die ersten n Zeichen aus einer Zeichenfolge in C # zu erhalten

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

2

Im Folgenden finden Sie eine Erweiterungsmethode, mit der überprüft wird, ob eine Zeichenfolge größer als erforderlich ist, die Zeichenfolge auf die definierte maximale Anzahl von Zeichen verkürzt und "..." angehängt wird.

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

Ich benutze:

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

oder alternativ, wenn Sie auch nach Whitespace suchen möchten (anstatt nur Null):

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

1

Oder Sie könnten String.ToCharArray () verwenden .
Es nimmt int startindexund und int lengthals Parameter und gibt a zurückchar[]

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

Sie müssten immer noch sicherstellen, dass die Zeichenfolge die richtige Länge hat, sonst wird a geworfen ArgumentOutOfRangeException


1

Bitte versuchen Sie diesen Code, wenn str kleiner als 5 ist.

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

0

Wenn wir nur die ersten 5 Zeichen aus einem Feld wollen, kann dies durch das linke Attribut erreicht werden

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


-3

Ich habe die obigen Antworten ausprobiert und das Beste, was ich denke, ist dieses

@item.First_Name.Substring(0,1)

Darin konnte ich den ersten Buchstaben der Zeichenkette bekommen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.