2009-05-09 9 views
59

.netプログラマーではありません。私は、古いvb関数left(string, length)と同等の.netを探しています。任意の長さの文字列で機能するという点で怠惰でした。期待通り、left("foobar", 3) = "foo"、最も有用なのはleft("f", 3) = "f"です。。NETの古いVBの左(文字列、長さ)の機能?

In。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

あなたを紹介してくれてうれしいです。 :) VB.NETとC#の両方で非常に便利な機能です(適切な使い方が分かっている限り)。いつでも便利に使えます。ところで、あなたが気付いたかどうかは分かりませんが、Math.Min関数はBCLの一部なので、C#でも使うことができます。 – Noldorin

+0

@Nolderin - とても素敵で、Math.Minのコメントを反映するように編集されています。ありがとうございました! – Josh

+1

脚注として、新しい文字列を返します(str.Take(length).ToArray());また動作します。おそらく部分文字列を使うほうが速いと思います。 – Sean

答えて

48

のためにそれを変更する必要がありますここで仕事をする拡張メソッドです。

<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 

これは、あなたがすなわち

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

拡張メソッドの例を入力するだけでした。 – j0tt

+0

私が知る限り、拡張メソッドはVB.NETでは機能しません。 – Oded

+1

@Oded:VB.NET 9で最も確実です.Extension属性を指定する必要があります。これはC#のメソッドとはかなり異なります。参照してくださいhttp://msdn.microsoft.com/en-us/library/bb384936.aspx – Noldorin

1

他の回答(正しい方法)で示唆されているように長さをテストする新しい関数で、呼び出しを部分文字列にラップするか、Microsoft.VisualBasic名前空間を使用して、leftを直接使用します(通常、 )あなたが作ることができ

+0

Try ... Catchを使用して、あらかじめ簡単に確認できるものをキャッチしないでください。 – Guffa

+0

よろしくお願いします。あなたのコメントとまったく同じ時刻に編集しました... – RobS

+0

なぜVisualBasic名前空間を「間違った方法」と見なしていますか?それが正確にそれが含まれている理由です。それはVBの一部です。 –

5

独自の

private string left(string inString, int inInt) 
{ 
    if (inInt > inString.Length) 
     inInt = inString.Length; 
    return inString.Substring(0, inInt); 
} 

編集:鉱山は、C#である、あなたはVB

29

もう1つのラインオプションのようなものになるだろう、ただ古いVB Left機能(すなわちLeft("foobar", 3))以降VB.NETの構文を使用して同じように使用できることを意味します以下:

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

ここで、myStringは、操作しようとしている文字列です。

+0

これは私の心に来た最初の解決策でした。私は、より簡単な/組み込みの方法が必要であると思った。しかし、何もありません... –

+0

私はこの答えを期待していました。ありがとう。 – Hari

30

Microsoft.VisualBasicライブラリへの参照を追加し、同じ方法で正確にであるStrings.Leftを使用することができます。

+1

もっと簡単な解決策 - ホイールを再発明するのは何ですか? – Billious

+0

.NETアプリケーションでVB参照を完全に削除したい場合はどうすればよいですか? – Hari

+4

これは、スプーンを見つけることができないときにスープをかき混ぜるためにフォークを使用するようなものです。 –

11

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

'count <= 0'は' count <1'よりもはっきりしていると思います。 –

1

別の技術をヌル場合を忘れないでは、左()メソッドを追加することにより、文字列オブジェクトを拡張することです。ここで

は、この技術上のソースの記事である:ここで

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 

エンドモジュール

これをあなたは拡張子を使用したいNYファイル:

Imports MyProjectName.StringExtensions 

はこのようにそれを使用します。

MyVar = MyString.Left(30) 
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の使用が本当に好きです。より良い解決策であるようです。

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 
} 

エラーではありません。空でない文字列としてnullを返し、トリムされた値またはベース値を返します。 "testx" .Left(4)やstr.Right(12)のように使用します。ただ、非常に特殊なケースで

0

あなたはこれをやっている場合は、そのままに、あなたは、例えば、いくつかの部分文字列を使用してデータをチェックします: if(Strings.Left(str, 1)=="*") ...;

を次に、あなたはまた、そのようなC#のインスタンスメソッドを使用することができますこれらのタスクを実行するにはStartsWithEndsWithとします。 if(str.StartsWith("*"))...;

関連する問題