web-dev-qa-db-ja.com

古いvb left(string、length)関数の.Net相当?

.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#拡張 も参照してください。

64
Josh

これを行う拡張メソッドを次に示します。

_<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"
_
52
Noldorin

別の1行オプションは、次のようなものです。

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

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

31
Oded

Microsoft.VisualBasicライブラリへの参照を追加すると、同じメソッドexactlyである Strings.Left を使用できます。

31
Garry Shutler

ヌルケースを忘れないでください

  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));
    }
13
CCondron
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);のように使用します。

5
Jeff Crawford

あなたは自分で作ることができます

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

編集:私のものはC#で、あなたはvbのためにそれを変更する必要があります

他の回答で提案されているようにサブストリングの長さをテストする新しい関数でサブストリングの呼び出しをラップするか(正しい方法)、Microsoft.VisualBasic名前空間を使用して直接使用します(一般的に間違った方法と見なされます!)

2
RobS

もう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)
2
Brad Mathews

私はこのようなことをするのが好きです:

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の使用が本当に好きで、より良い解決策のようです。

1
danfolkes

非常に特殊な場合:

これを左に行っている場合、一部の文字列でデータをチェックします。例:if(Strings.Left(str, 1)=="*") ...;

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

0
deadManN

拡張メソッドの使用を避け、アンダー長エラーを防止したい場合は、これを試してください

string partial_string = text.Substring(0, Math.Min(15, text.Length)) 
// example of 15 character max
0
user3029478