.NET эквивалент старой функции vb left (string, length)?
Как программист non.net, я ищу эквивалент .net старой функции vb left(string, length)
. Это было лениво, поскольку он работал для любой длины строки. Как и ожидалось, left("foobar", 3) = "foo"
в то время как, наиболее полезно, left("f", 3) = "f"
.
В .net string.Substring(index, length)
выдает исключения для всего вне диапазона. В Java у меня всегда был Apache-Commons lang.StringUtils. В Google я не очень хорошо разбираюсь в строковых функциях.
Edit:
@Noldorin - Вау, спасибо за ваши расширения vb.net! Моя первая встреча, хотя мне потребовалось несколько секунд, чтобы сделать то же самое в С#:
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)
. См. Также расширения С# в msdn.
Ответы
Ответ 1
Здесь используется метод расширения, который будет выполнять задание.
<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"
Ответ 2
Добавьте ссылку на библиотеку Microsoft.VisualBasic, и вы можете использовать Strings.Left, который является точно таким же способом.
Ответ 3
Еще один вариант с одной строкой будет выглядеть примерно так:
myString.Substring(0, Math.Min(length, myString.Length))
Где myString - это строка, с которой вы пытаетесь работать.
Ответ 4
не забывайте нулевой случай
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));
}
Ответ 5
вы можете сделать свой собственный
private string left(string inString, int inInt)
{
if (inInt > inString.Length)
inInt = inString.Length;
return inString.Substring(0, inInt);
}
edit: mine находится в С#, вам придется изменить его для vb
Ответ 6
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
}
Не следует использовать ошибку, возвращает nulls как пустую строку, возвращает обрезанные или базовые значения. Используйте его как "testx".Left(4) или str.Right(12);
Ответ 7
Вы можете либо обернуть вызов подстроке в новую функцию, которая проверяет ее длину, как предложено в других ответах (правильно), либо использовать пространство имен Microsoft.VisualBasic и использовать левую ссылку (обычно считается неправильной!).
Ответ 8
Другой способ - расширить строковый объект, добавив метод 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)
Ответ 9
Мне нравится делать что-то вроде этого:
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, это лучшее решение.
Ответ 10
Только в очень особенном случае:
Если вы делаете это так, то вы проверите данные с некоторой частичной строкой, например: if(Strings.Left(str, 1)=="*") ...;
Затем вы также можете использовать методы экземпляра С#, такие как StartsWith
и EndsWith
для выполнения этих задач.
if(str.StartsWith("*"))...;