.Net-эквивалент старой функции VB left (string, length)?


как не .net программист я ищу .net-эквивалент старой функции vb left(string, length). Он был ленив в том, что он работал для любой длины строки. Как и ожидалось, left("foobar", 3) = "foo" в то время как, наиболее полезно,left("f", 3) = "f".

в .сети string.Substring(index, length) исключения для всего диапазона. На Java у меня всегда был язык Apache-Commons.StringUtils удобно. В Google я не очень далеко ищу строковые функции.

Edit:

@Noldorin - Вау, спасибо за ваш vb.net расширения! Моя первая встреча, хотя мне понадобилось несколько секунд, чтобы сделать то же самое в C#:

public static class Utils
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }
}

обратите внимание на статический класс и метод, а также this ключевое слово. Да, их так же просто вызвать, как "foobar".Left(3). Смотрите также расширения c# на msdn.

11 61

11 ответов:

вот метод расширения, который будет выполнять эту работу.

<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

Это означает, что вы можете использовать его так же, как старый VB

добавить ссылку на Microsoft.VisualBasic библиотека и вы можете использовать строки.Слева что это ровно один и тот же метод.

еще один вариант одной строки будет примерно следующим:

myString.Substring(0, Math.Min(length, myString.Length))

где myString-это строка, с которой вы пытаетесь работать.

Не забудьте null случай

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

вы могли бы сделать свой собственный

private string left(string inString, int inInt)
{
    if (inInt > inString.Length)
        inInt = inString.Length;
    return inString.Substring(0, inInt);
}

edit: мой находится в C#, вам придется изменить его на 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
}

не должно быть ошибки, возвращает нули в виде пустой строки, возвращает обрезанные или базовые значения. Использовать его как "testx".Слева(4) или ул.Право(12);

вы можете либо обернуть вызов substring в новую функцию, которая проверяет его длину, как это предлагается в других ответах (правильный путь), либо использовать Microsoft.VisualBasic пространство имен и использовать левый непосредственно (как правило, считается неправильным способом!)

другой метод заключается в расширении объекта string путем добавления метода Left ().

вот исходная статья по этой методике:

http://msdn.microsoft.com/en-us/library/bb384936.aspx

вот моя реализация (в VB):

Модуль StringExtensions

<Extension()>
Public Function Left(ByVal aString As String, Length As Integer)
    Return aString.Substring(0, Math.Min(aString.Length, Length))
End Function

Конец Модуля

затем поместите это в верхней части любого файла, в котором вы хотите использовать расширение:

Imports MyProjectName.StringExtensions

использовать его вот так:

MyVar = MyString.Left(30)

Мне нравится делать что-то вроде этого:

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"

хотя, если вы хотите, чтобы конечные или начальные пробелы, то вам не повезло.

Мне очень нравится использование математики.Мин, кажется, это лучшее решение.

Просто В Очень Особом Случае:

если вы делаете это слева, то вы будете проверять данные с некоторой частичной строкой, например: if(Strings.Left(str, 1)=="*") ...;

тогда вы также можете использовать методы экземпляра C#, такие как StartsWith и EndsWith для выполнения этих задач. if(str.StartsWith("*"))...;

Если вы хотите избежать использования метода расширения и предотвратить ошибку под длиной, попробуйте это

string partial_string = text.Substring(0, Math.Min(15, text.Length)) 
// example of 15 character max