文字列の最初の5文字を​​取得する方法


133

文字列の最初の文字を取得するためにこの質問を読みました。C#の文字列から最初のn個の文字を取得する方法はありますか?


前の質問はchar**について質問していて、あなたは**文字について質問しています。彼らは同じものではありません。𣊾そして、𣇞プログラマが違いを知らなかったので、私はC#Iで記述されたソフトウェアに障害が発生した昨日を使用するために必要な2つの文字は使用していたcharとの文字が。この罠に陥らないでください!
ヒッピートレイル2015

回答:


218

Enumerable.Takeを次のように使用できます

char[] array = yourStringVariable.Take(5).ToArray();

または、String.Substringを使用できます。

string str = yourStringVariable.Substring(0,5);

String.Substring文字列の長さが必要な文字より短い場合、例外がスローされる可能性があることを覚えておいてください。

結果を文字列に戻したい場合は、次を使用できます。

  • 文字列コンストラクタとLINQの使用 Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

アプローチのプラスは、事前に長さをチェックしないことです。

  • もう1つの方法はString.Substring、エラーチェックで使用することです。

お気に入り:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
文字列val = new string(yourStringVariable.Take(6).ToArray()); しかし、yourStringVariableの長さが5未満の場合、サブストリングはエラーになります
Moji

1
IsNullOrWhiteSpaceここは間違っています。10個の空白を含む文字列を考えてください。コードは10個すべてを返します。IsNullOrEmpty代わりに使用してください。(IsNullOrWhiteSpace他のテストと組み合わせるのは良くありません。代わりにnull + emptyをテストし、それTrimが指定された動作である場合、必要なテスト/操作をすべて実行してください。)
ToolmakerSteve

1
次のようにString.Concat()を使用して、ToArray()への呼び出しを保存できます。string firstFivChar = String.Concat(yourStringVariable.Take(5));
BlueFuzzyThing


38

Substring(int startIndex、int length)を使用できます

string result = str.Substring(0,5);

サブストリングは、指定された文字位置から始まり、指定された長さを持ちます。このメソッドは、現在のインスタンスの値を変更しません。代わりに、現在の文字列、MSDNの startIndex位置から始まる長さの文字を含む新しい文字列を返します。

ソース文字列が5文字未満の場合はどうなりますか?上記の方法を使用すると、例外が発生します。文字列の文字数が5を超えているかどうかを確認する条件を設定してから、部分文字列を介して最初の5文字を​​取得できます。注:ソース文字列をfirstFiveChar変数に割り当てました。文字が5未満の場合、firstFiveCharは変更されないため、それ以外の部分は必要ありません。

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

の使用時に適切なチェックを行う方法については誰も言及していSubstring()なかったので、それについて貢献したいと思いました。

を使用Linqしたくない場合Substring()は、文字列がSubstring()関数の2番目のパラメーター(長さ)よりも大きいことを確認する必要があります。

最初の5文字が必要だとします。次のように、適切なチェックを行う必要があります。

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

このチェックSubstring()がないと、存在しない文字を繰り返し処理するため、関数は例外をスローします。

あなたはアイデアを理解していると思います...


素敵な追加情報
Rob85

気に入ってくれてうれしいです。
ilter、

これは私に大いに役立ちましたが、その行でそれが正確に何をしているのか説明できますか?
ジンボブ2017

サブストリングに関するいくつかの例を確認します。インデックスのパラメータを取ります。開始インデックスは0です。任意の配列の最後のインデックスよりも大きい(さらに言えば、小さい)ものを書き込むと、インデックス外例外が発生します。このチェックは、例ではその例外を回避するためのものです。
ilter 2017

はははは!:)それは私が答えた質問でした。その質問に未回答のままにしておくべきでしょうか?:)
ilter

18

問題.Substring(,)は、指定された文字列が少なくとも要求された文字数の長さであることを確認する必要があることですArgumentOutOfRangeException。それ以外の場合は、スローされます。

ソリューション1(「サブストリング」を使用):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

を使用.Substring(する場合の欠点は、指定された文字列の長さを確認する必要があることです。

ソリューション2(「Take」を使用):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

「Take」を使用すると、指定した文字列の長さを確認する必要がなくなります。


13

PadRight関数を使用して文字列が短くなりすぎないようにし、必要なものを取得して、1つのステートメントで最後からスペースをすべて削除します。

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
これはこれまでのところより良い解決策です。サブストリングのみを使用すると、ストリングの長さがサブストリングの長さよりも短い場合にエラーが発生する可能性があります。
Asiri Dissanayaka 2018年

SQL Serverで使用するLEFT関数の最良の代替案
vibs2006

11

なぜだれがこれに言及したのか、私にはわかりません。しかし、これはこれを実現するための最短かつ最も簡単な方法です。

string str = yourString.Remove(n);

n -必要な文字数

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
これは内部的には「this.Substring(0、5)」と同じなので、文字列が適切な長さであることを確認する必要があります。
PersyJack 2016年

最初のn文字が必要な場合、これは文字列の長さがわかっている場合にのみ機能します。長さが変わる可能性がある場合、これは常に機能するとは限りません。私はそれがおそらくほとんどの人にとって明白であることを知っていますが、通り過ぎる人のためにそれを言及するだけです...
user1289451

10

5つの空白文字を追加してから、最初の5文字を​​切り取り、結果をトリミングします。追加するスペースの数は、カットする数と一致する必要があります。前に括弧を必ず含めてください.Substring(0,X)。そうしないと何も追加されません。

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

このテクニックを使用するとArgumentOutOfRangeException、他の回答で言及されていることを心配する必要はありません。


1
私はそれを投稿するつもりだった!賛成。(それは2019年ですが、Mid $が1985年に行ったことを文字列に行うメソッドがないのはなぜですか?「あなたはそれを行うべきではありません」と言う人のために、私のために私のコードを書きに来てください...それを行う...)
FastAl


6

C#8.0でこれを行う新しい方法があります。範囲演算子です。

Microsoftドキュメント

または、私がemと呼んでいるように、パンダススライス。

古い方法:

string newString = oldstring.Substring(0, 5);

新しい方法:

string newString = oldstring[..5];

一見すると、短いコードの読みやすさのかなり悪いトレードオフのように見えますが、新しい機能により、

  1. 配列(および文字列)をスライスするための標準構文
  2. このようなクールなもの:

    var slice1 = list [2 .. ^ 3]; // list [Range.Create(2、Index.CreateFromEnd(3))]

    var slice2 = list [.. ^ 3]; // list [Range.ToEnd(Index.CreateFromEnd(3))]

    var slice3 = list [2 ..]; // list [Range.FromStart(2)]

    var slice4 = list [..]; // list [Range.All]


3

C#の文字列から最初のn個の文字を取得するには

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

以下は、文字列が必要なものよりも大きいかどうかをチェックし、文字列を定義された最大文字数に短縮して「...」を追加する拡張メソッドです。

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

私が使う:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

または、空白のみをチェックしたい場合は(Nullだけでなく):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

または、String.ToCharArray()を使用することもできます。とをパラメータとして
受け取り、int startindexint lengthchar[]

new string(stringValue.ToCharArray(0,5))

文字列が適切な長さであることを確認する必要があります。それ以外の場合は、 ArgumentOutOfRangeException


1

strが5未満のときにこのコードを試してください。

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

任意のフィールドの最初の5文字だけが必要な場合、これは左属性によって達成できます。

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

私は上記の答えを試しましたが、私が思う最高のものはこれです

@item.First_Name.Substring(0,1)

これで、文字列の最初の文字を取得できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.