.Net等价于旧的vb left(string,length)函数?

作为一个非.NET的程序员,我正在寻找旧的vb函数left(string, length)的.net等价物。 这是懒惰的,它适用于任何长度的string。 正如所料, left("foobar", 3) = "foo"而最有帮助的是left("f", 3) = "f"

在.net string.Substring(index, length)抛出所有超出范围的exception。 在Java中我总是有Apache-Commons lang.StringUtils方便。 在谷歌我没有太多的searchstring函数。

编辑:

@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)一样简单"foobar".Left(3) 。 另请参阅msdn上的c#扩展 。

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

 <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 Left函数(即Left("foobar", 3) )或者使用更新的VB.NET语法一样来使用它。

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

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

另一个选项是类似于下面的内容:

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

myString是你正在尝试使用的string。

不要忘记空的情况

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

编辑:我的是在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 } 

不应该错误,将空值返回为空string,返回修剪或基本值。 使用它像“testx”.Left(4)或str.Right(12);

你可以把这个调用包装到一个新的函数中,这个函数会根据其他答案(正确的方式)的build议testing它的长度,或者使用Microsoft.VisualBasic命名空间并直接使用(通常被认为是错误的方法!

另一种技术是通过添加一个Left()方法来扩展string对象。

这里是关于这种技术的源文章:

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

这是我的实现(在VB中):

Module 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" 

但是,如果你想追踪或开始空间,那么你是运气不好。

我真的很喜欢Math.Min的使用,似乎是一个更好的解决scheme。

只是在非常特殊的情况下:

如果你这样做,那么你会检查一些部分string的数据,例如: if(Strings.Left(str, 1)=="*") ...;

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