.net以外のプログラマとして、古いvb関数left(string, length)
に相当する.netを探しています。どんな長さの文字列でも機能するという点で怠け者でした。予想どおり、left("foobar", 3) = "foo"
while、最も役立つのはleft("f", 3) = "f"
です。
.netでは、string.Substring(index, length)
は範囲外のすべてに対して例外をスローします。 In 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)
と同じくらい簡単に呼び出すことができます。 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"
_
別の1行オプションは、次のようなものです。
myString.Substring(0, Math.Min(length, myString.Length))
ここで、myStringは操作しようとしている文字列です。
Microsoft.VisualBasicライブラリへの参照を追加すると、同じメソッドexactlyである Strings.Left を使用できます。
ヌルケースを忘れないでください
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));
}
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
}
エラーではなく、空の文字列としてnullを返し、トリミングされた値またはベース値を返します。 "testx" .Left(4)またはstr.Right(12);のように使用します。
あなたは自分で作ることができます
private string left(string inString, int inInt)
{
if (inInt > inString.Length)
inInt = inString.Length;
return inString.Substring(0, inInt);
}
編集:私のものはC#で、あなたはvbのためにそれを変更する必要があります
他の回答で提案されているようにサブストリングの長さをテストする新しい関数でサブストリングの呼び出しをラップするか(正しい方法)、Microsoft.VisualBasic名前空間を使用して直接使用します(一般的に間違った方法と見なされます!)
もう1つの方法は、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)
私はこのようなことをするのが好きです:
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の使用が本当に好きで、より良い解決策のようです。
非常に特殊な場合:
これを左に行っている場合、一部の文字列でデータをチェックします。例:if(Strings.Left(str, 1)=="*") ...;
次に、StartsWith
やEndsWith
などのC#インスタンスメソッドを使用して、これらのタスクを実行することもできます。 if(str.StartsWith("*"))...;
拡張メソッドの使用を避け、アンダー長エラーを防止したい場合は、これを試してください
string partial_string = text.Substring(0, Math.Min(15, text.Length))
// example of 15 character max