c# - functions - .Net equivalente de la antigua función vb left(string, length)?
substring vb6 (10)
Como programador que no es .NET, estoy buscando el equivalente .net de la antigua función vb left(string, length)
. Era flojo porque funcionaba con cualquier cadena de longitud. Como se esperaba, left("foobar", 3) = "foo"
, mientras que, lo más útil, left("f", 3) = "f"
.
En .net string.Substring(index, length)
arroja excepciones para todo fuera de rango. En Java siempre tuve a mano lang.StringUtils de Apache-Commons. En Google, no llego muy lejos en la búsqueda de funciones de cadenas.
Editar:
@Noldorin - ¡Guau, gracias por tus extensiones de vb.net! Mi primer encuentro, aunque me tomó varios segundos hacer lo mismo en c #:
public static class Utils
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
}
Tenga en cuenta la clase estática y el método, así como la palabra clave this
. Sí, son tan simples de invocar como "foobar".Left(3)
. Ver también c # extensiones en msdn .
Agregue una referencia a la biblioteca Microsoft.VisualBasic y puede usar Strings.Left que es exactamente el mismo método.
Aquí hay un método de extensión que hará el trabajo.
<System.Runtime.CompilerServices.Extension()> _
Public Function Left(ByVal str As String, ByVal length As Integer) As String
Return str.Substring(0, Math.Min(str.Length, length))
End Function
Esto significa que puede usarlo igual que la antigua función VB Left
(es decir, Left("foobar", 3)
) o utilizando la sintaxis más reciente de VB.NET, es decir,
Dim foo = "f".Left(3) '' foo = "f"
Dim bar = "bar123".Left(3) '' bar = "bar"
Me gusta hacer algo como esto:
string s = "hello how are you";
s = s.PadRight(30).Substring(0,30).Trim(); //"hello how are you"
s = s.PadRight(3).Substring(0,3).Trim(); //"hel"
Sin embargo, si quieres espacios iniciales o finales, entonces no tienes suerte.
Me gusta mucho el uso de Math.Min, parece ser una mejor solución.
Otra opción de una línea sería algo como lo siguiente:
myString.Substring(0, Math.Min(length, myString.Length))
Donde myString es la cadena con la que intentas trabajar.
Otra técnica es extender el objeto cadena agregando un método Left ().
Aquí está el artículo original sobre esta técnica:
msdn.microsoft.com/en-us/library/bb384936.aspx
Aquí está mi implementación (en VB):
Módulo StringExtensions
<Extension()>
Public Function Left(ByVal aString As String, Length As Integer)
Return aString.Substring(0, Math.Min(aString.Length, Length))
End Function
Módulo final
Luego, coloca esto en la parte superior de cualquier archivo en el que quieras usar la extensión:
Imports MyProjectName.StringExtensions
Úselo así:
MyVar = MyString.Left(30)
Puede envolver la llamada a subcadena en una nueva función que pruebe la longitud como se sugiere en otras respuestas (la forma correcta) o usar el espacio de nombres Microsoft.VisualBasic y usar directamente a la izquierda (generalmente considerado de manera incorrecta).
Solo en caso muy especial:
Si está haciendo esto, entonces deberá verificar los datos con alguna cadena parcial, por ejemplo: if(Strings.Left(str, 1)=="*") ...;
Luego también puede usar métodos de instancias C # como StartsWith
y EndsWith
para realizar estas tareas. if(str.StartsWith("*"))...;
no te olvides del caso nulo
public static string Left(this string str, int count)
{
if (string.IsNullOrEmpty(str) || count < 1)
return string.Empty;
else
return str.Substring(0,Math.Min(count, str.Length));
}
podrías hacer tu propio
private string left(string inString, int inInt)
{
if (inInt > inString.Length)
inInt = inString.Length;
return inString.Substring(0, inInt);
}
editar: el mío está en C #, tendrás que cambiarlo por vb
using System;
public static class DataTypeExtensions
{
#region Methods
public static string Left(this string str, int length)
{
str = (str ?? string.Empty);
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
str = (str ?? string.Empty);
return (str.Length >= length)
? str.Substring(str.Length - length, length)
: str;
}
#endregion
}
No debe error, devuelve nulos como cadena vacía, devuelve valores recortados o base. Úselo como "testx". Izquierda (4) o str.Right (12);