.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#实例方法(如StartsWith
和EndsWith
来执行这些任务。 if(str.StartsWith("*"))...;