.Net相当于旧的vb left(字符串,长度)函数?

时间:2009-05-09 21:01:31

标签: c# .net vb.net

作为非.net程序员,我正在寻找旧的vb函数left(string, length)的.net等价物。它很懒,因为它适用于任何长度的字符串。正如所料,left("foobar", 3) = "foo"同时,最有帮助的是left("f", 3) = "f"

在.net string.Substring(index, length)中抛出一切超出范围的异常。在Java中,我总是使用Apache-Commons lang.StringUtils。在Google中,我不太了解字符串函数。

编辑:

@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# extensions on msdn

11 个答案:

答案 0 :(得分:51)

这是一个可以完成工作的扩展方法。

<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

这意味着您可以像使用旧的Left函数(即Left("foobar", 3))或使用较新的VB.NET语法一样使用它,即

Dim foo = "f".Left(3) ' foo = "f"
Dim bar = "bar123".Left(3) ' bar = "bar"

答案 1 :(得分:31)

添加对Microsoft.VisualBasic库的引用,您可以使用完全相同方法的Strings.Left

答案 2 :(得分:30)

另一个行选项如下:

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

myString是您尝试使用的字符串。

答案 3 :(得分:13)

不要忘记空案例

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

答案 4 :(得分:5)

你可以自己制作

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

编辑:我的是C#,你必须为vb更改它

答案 5 :(得分:5)

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
}

不应该出错,将空值作为空字符串返回,返回trimmed或base值。像“testx”.Left(4)或str.Right(12);

一样使用它

答案 6 :(得分:2)

您可以将调用包装在一个新函数中,该函数根据其他答案(正确的方法)建议测试其长度,或者使用Microsoft.VisualBasic命名空间并直接使用left(通常认为是错误的方法!)

答案 7 :(得分:2)

另一种技术是通过添加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)

答案 8 :(得分:1)

我喜欢这样做:

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"

但是,如果你想要尾随或开始空格,那么你就不走运了。

我非常喜欢使用Math.Min,它似乎是一个更好的解决方案。

答案 9 :(得分:0)

非常特殊情况:

如果您这样做,那么您将使用一些部分字符串检查数据,例如:    if(str1.length() >= 8 && str1.matches("[a-zA-Z0-9]*")) //works exclusive of the third criterion

然后,您还可以使用if(Strings.Left(str, 1)=="*") ...;StartsWith等C#实例方法来执行这些任务。 EndsWith

答案 10 :(得分:0)

如果要避免使用扩展方法并防止长度不足的错误,请尝试

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