作为非.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。
答案 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