Cómo obtener los primeros cinco caracteres de una cadena

133

He leído esta pregunta para obtener el primer carácter de la cadena. ¿Hay alguna manera de obtener el primer n número de caracteres de una cadena en C #?

Ala de caballero
fuente
La pregunta anterior es acerca de char** sy preguntas sobre ** caracteres s. No són la misma cosa. 𣊾y 𣇞son dos caracteres que necesitaba usar ayer mismo que fallaron en el software escrito en C # que estaba usando porque el programador no sabía la diferencia entre a chary un carácter. ¡No caigas en esta trampa!
hippietrail

Respuestas:

218

Puede usar Enumerable. Tome como:

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

O puede usar String.Substring .

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

Recuerde que String.Substringpodría generar una excepción en caso de que la longitud de la cadena sea menor que los caracteres requeridos.

Si desea recuperar el resultado en cadena, puede usar:

  • Usando String Constructor y LINQ's Take

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

La ventaja con el enfoque no es verificar la longitud de antemano.

  • La otra forma es usarlo String.Substringcon la comprobación de errores

me gusta:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;
Habib
fuente
3
string val = cadena nueva (yourStringVariable.Take (6) .ToArray ()); pero Substring producirá un error si la longitud de yourStringVariable es menor a 5
Moji
1
IsNullOrWhiteSpaceEstá mal aquí. Considere una cadena con 10 espacios en blanco: su código devolverá los 10. Use en su IsNullOrEmptylugar. (No es bueno combinarlo IsNullOrWhiteSpacecon ninguna otra prueba; en su lugar, pruebe nulo + vacío, luego, Trimsi ese es el comportamiento especificado, haga las pruebas / operaciones necesarias.)
ToolmakerSteve
1
Puede guardar una llamada a ToArray () utilizando String.Concat () así: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing
38

Puede usar Subcadena (int startIndex, int length)

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

La subcadena comienza en una posición de carácter especificada y tiene una longitud especificada. Este método no modifica el valor de la instancia actual. En su lugar, devuelve una nueva cadena con caracteres de longitud que comienzan desde la posición startIndex en la cadena actual, MSDN

¿Qué sucede si la cadena de origen tiene menos de cinco caracteres? Obtendrá una excepción al usar el método anterior. Podemos poner la condición para verificar si el número de caracteres en la cadena es más de 5 y luego obtener los primeros cinco a través de Subcadena. Tenga en cuenta que he asignado la cadena de origen a la variable firstFiveChar. FirstFiveChar no cambia si los caracteres son inferiores a 5, por lo que no se requiere parte.

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

Nadie mencionó cómo hacer las comprobaciones adecuadas cuando se usa Substring(), por lo que quería contribuir al respecto.

Si no desea usar Linqe ir con Substring(), debe asegurarse de que su cadena sea más grande que el segundo parámetro (longitud) de la Substring()función.

Digamos que necesitas los primeros 5 caracteres. Debería obtenerlos con la verificación adecuada, así:

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

// firstFiveChars: "love" (4 characters)

Sin esta verificación, la Substring()función generaría una excepción porque iteraría a través de letras que no están allí.

Creo que tienes la idea ...

ilter
fuente
información adicional encantadora
Rob85
Me alegro de que te haya gustado.
ilter
Esto me ayudó mucho, pero ¿podría explicar qué está haciendo exactamente en esa línea?
jimbob
Verificaría algunos ejemplos sobre la subcadena. Toma parámetros para los índices. El índice inicial es 0. Si escribe algo más grande (o más pequeño, de hecho) que el último índice de cualquier matriz, obtendrá una excepción fuera del índice. Esa verificación, en el ejemplo, es para evitar esa excepción.
ilter
Jajajaja :) Fue una pregunta que respondí. ¿Debería haber dejado esa pregunta sin respuesta? :)
ilter
18

El problema .Substring(,)es que debe asegurarse de que la cadena dada tenga al menos la longitud de la cantidad de caracteres solicitada; de lo contrario, se ArgumentOutOfRangeExceptiongenerará un .

Solución 1 (usando 'Subcadena'):

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

El inconveniente de usar .Substring(es que necesitará verificar la longitud de la cadena dada.

Solución 2 (usando 'Take'):

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

El uso de 'Tomar' evitará que deba verificar la longitud de la cadena dada.

Steven
fuente
13

Use la función PadRight para evitar que la cadena sea demasiado corta, tome lo que necesita y luego recorte los espacios desde el final, todo en una sola declaración.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();
ChrisF
fuente
1
Esta es la mejor solución hasta ahora. Usar solo la subcadena puede causar un error cuando la longitud de la cadena es menor que la longitud de la subcadena.
Asiri Dissanayaka
La mejor alternativa para la función IZQUIERDA que utilizamos en SQL Server
vibs2006
11

No sé por qué alguien mencionó esto. Pero es la forma más corta y sencilla de lograr esto.

string str = yourString.Remove(n);

n - número de caracteres que necesitas

Ejemplo

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141
Viacheslav Avsenev
fuente
3
Esto es internamente lo mismo que "this.Substring (0, 5)", por lo que debe asegurarse de que la cadena tenga la longitud adecuada.
PersyJack
En el caso de que desee los primeros n caracteres, esto solo funciona si conoce la longitud de la cadena. Si la longitud puede cambiar, esto no siempre funcionará. Sé que eso es probablemente obvio para la mayoría, pero solo lo menciono para cualquiera que pase ...
user1289451
10

Agregue cinco caracteres de espacio en blanco, luego corte los primeros cinco y recorte el resultado. El número de espacios que agregue debe coincidir con el número que está cortando. Asegúrese de incluir el paréntesis antes .Substring(0,X)o no agregará nada.

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

Con esta técnica no tendrá que preocuparse por lo ArgumentOutOfRangeExceptionmencionado en otras respuestas.

alikerim
fuente
1
¡Maldita sea, iba a publicar eso! Votado (es 2019, ¿por qué no puede haber un método en cadena que haga lo que Mid $ hizo en 1985? Para aquellos que dicen 'no deberías hacer eso' OK, ven a escribir mi código para mí ... tendrás que hazlo ...)
FastAl
7
string str = "GoodMorning"

string strModified = str.Substring(0,5);
Rajeev Kumar
fuente
2
producirá un error si la longitud de la variable "str" ​​es menor que 5
Moji
6

Solo un aviso es una nueva forma de hacer esto en C # 8.0: operadores de rango

Documentos de Microsoft

O como me gusta llamarlos, rebanadas de pandas.

Vieja forma:

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

Nueva manera:

string newString = oldstring[..5];

Lo que a primera vista parece una muy mala compensación de cierta legibilidad para un código más corto, pero la nueva característica le brinda

  1. una sintaxis estándar para cortar matrices (y, por lo tanto, cadenas)
  2. cosas geniales como esta:

    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 ..]; // lista [Range.FromStart (2)]

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

Nathan SSSSSS
fuente
3

Para obtener el primer n número de caracteres de una cadena en C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);
Saleem Kalro
fuente
2

A continuación se muestra un método de extensión que comprueba si una cadena es más grande de lo que se necesitaba y acorta la cadena a la cantidad máxima definida de caracteres y agrega '...'.

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;
    }
}
Peter
fuente
2

En C # 8.0 puede obtener los primeros cinco caracteres de una cadena de esta manera

string str = data[0..5];

Aquí hay más información sobre índices y rangos

AndrewE
fuente
1

Yo suelo:

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

o alternativa si desea verificar el espacio en blanco también (en lugar de solo nulo):

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

O puede usar String.ToCharArray () .
Toma int startindexy int lengthcomo parámetros y devuelve unchar[]

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

Aún deberá asegurarse de que la cadena tenga la longitud adecuada, de lo contrario arrojará un ArgumentOutOfRangeException

sjokkogutten
fuente
1

Intente amablemente este código cuando str sea menor que 5.

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

Si solo queremos los primeros 5 caracteres de cualquier campo, esto se puede lograr con el atributo izquierdo

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""
Yasir Iqbal
fuente
-3

He probado las respuestas anteriores y la mejor creo que es esta

@item.First_Name.Substring(0,1)

En esto pude obtener la primera letra de la cadena

Nadhirsha bin shaju
fuente