web-dev-qa-db-ja.com

文字列から右端のn文字のみを抽出します

別の文字列から右端の6文字で構成される部分文字列を抽出するにはどうすればよいですか?

例:私の文字列は「PER 343573」です。ここで、「343573」のみを抽出します。

これどうやってするの?

98
Shyju
string SubString = MyString.Substring(MyString.Length-6);
142
Vilx-

Right(n);関数を表現する拡張メソッドを作成します。この関数は、空の文字列を返すnullまたは空の文字列、元の文字列を返す最大長より短い文字列、および右端の文字の最大長を返す最大長より長い文字列を処理する必要があります。

public static string Right(this string sValue, int iMaxLength)
{
  //Check if the value is valid
  if (string.IsNullOrEmpty(sValue))
  {
    //Set valid empty string as string could be null
    sValue = string.Empty;
  }
  else if (sValue.Length > iMaxLength)
  {
    //Make the string no longer than the max length
    sValue = sValue.Substring(sValue.Length - iMaxLength, iMaxLength);
  }

  //Return the string
  return sValue;
}
65
stevehipwell

おそらく拡張メソッドを使用する方が良いでしょう:

public static class StringExtensions
{
    public static string Right(this string str, int length)
    {
        return str.Substring(str.Length - length, length);
    }
}

使用法

string myStr = "ABCDEPER 343573";
string subStr = myStr.Right(6);
38
James
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);のように使用します。

25
Jeff Crawford

MSDN

String mystr = "PER 343573";
String number = mystr.Substring(mystr.Length-6);

編集:遅すぎる...

13
RvdK

文字列の長さはわからないが、単語数(この場合は 'xxx yyyyyy'のように常に2単語)が確かな場合は、splitを使用することをお勧めします。

string Result = "PER 343573".Split(" ")[1];

これは常に文字列の2番目のWordを返します。

8

これはまさにあなたが求めているものではありませんが、例を見るだけで、文字列の数値セクションを探しているように見えます。

これが常に当てはまる場合は、正規表現を使用するのが良い方法です。

var regex= new Regex("\n+");
string numberString = regex.Match(page).Value;
6
chills42

要件を推測しますが、次の正規表現は、文字列の終わりの前の6文字の英数字でのみ生成され、それ以外の場合は一致しません。

string result = Regex.Match("PER 343573", @"[a-zA-Z\d]{6}$").Value;
5
Wade

これを使って:

String text = "PER 343573";
String numbers = text;
if (text.Length > 6)
{
    numbers = text.Substring(text.Length - 6);
}
5
cjk

すべてを MSIL にコンパイルする.NETを使用しているため、参照のみ Microsoft.VisualBasic 、およびMicrosoftの組み込みを使用 Strings.Right method

using Microsoft.VisualBasic;
...
string input = "PER 343573";
string output = Strings.Right(input, 6);

カスタム拡張メソッドやその他の作業を作成する必要はありません。結果は、1つの参照と1つの単純なコード行で達成されます。

これに関する詳細情報として、C#でのVisual Basicメソッドの使用が文書化されています elsewhere 。私は個人的にファイルを解析しようと最初につまずき、 this SO thread .csvファイルの解析に非常に役立つMicrosoft.VisualBasic.FileIO.TextFieldParserクラスを使用していることを発見しました。

4
Aaron Thomas

これを使って:

string mystr = "PER 343573"; int number = Convert.ToInt32(mystr.Replace("PER ",""));

3
Brandao
var str = "PER 343573";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // "343573"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "343573"

これは、strの任意の数の文字をサポートします。代替コードはnull文字列をサポートしていません。そして、1つ目はより高速で、2つ目はよりコンパクトです。

短い文字列を含むstrを知っている場合、2番目の方が好きです。長い文字列の場合、最初の文字列の方が適しています。

例えば.

var str = "";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // ""
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // ""

または

var str = "123";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // "123"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "123"
3

ヌルセーフメソッド:

元の文字列を返す最大長より短い文字列

String Right Extension Method

public static string Right(this string input, int count) =>
    String.Join("", (input + "").ToCharArray().Reverse().Take(count).Reverse());

文字列左拡張メソッド

public static string Left(this string input, int count) =>
    String.Join("", (input + "").ToCharArray().Take(count));
3
desmati

これは私が使用する方法です。私は物事をシンプルに保つのが好きです。

private string TakeLast(string input, int num)
{
    if (num > input.Length)
    {
        num = input.Length;
    }
    return input.Substring(input.Length - num);
}

言及されないかもしれない別の解決策

S.Substring(S.Length < 6 ? 0 : S.Length - 6)
2
FLICKER

ちょっとした考え:

public static string Right(this string @this, int length) {
    return @this.Substring(Math.Max(@this.Length - length, 0));
}
1
Hamid Sadeghian

ここに私が使用する解決策があります...入力文字列の長さが要求された長さよりも小さくないことをチェックします。上記の投稿にあるソリューションは、残念ながらこれを考慮に入れていません-クラッシュにつながる可能性があります。

    /// <summary>
    /// Gets the last x-<paramref name="amount"/> of characters from the given string.
    /// If the given string's length is smaller than the requested <see cref="amount"/> the full string is returned.
    /// If the given <paramref name="amount"/> is negative, an empty string will be returned.
    /// </summary>
    /// <param name="string">The string from which to extract the last x-<paramref name="amount"/> of characters.</param>
    /// <param name="amount">The amount of characters to return.</param>
    /// <returns>The last x-<paramref name="amount"/> of characters from the given string.</returns>
    public static string GetLast(this string @string, int amount)
    {
        if (@string == null) {
            return @string;
        }

        if (amount < 0) {
            return String.Empty;
        }

        if (amount >= @string.Length) {
            return @string;
        } else {
            return @string.Substring(@string.Length - amount);
        }
    }
1
Yves Schelpe

ビットコンバーターとビットシフトに頼らずに(エンコードを確認する必要があります)、これは拡張メソッド「右」として使用する最速のメソッドです。

string myString = "123456789123456789";

if (myString > 6)
{

        char[] cString = myString.ToCharArray();
        Array.Reverse(myString);
        Array.Resize(ref myString, 6);
        Array.Reverse(myString);
        string val = new string(myString);
}
0
user86157

私はMinを使用して否定的な状況を防ぎ、null文字列も処理します

// <summary>
    /// Returns a string containing a specified number of characters from the right side of a string.
    /// </summary>
    public static string Right(this string value, int length)
    {
        string result = value;
        if (value != null)
            result = value.Substring(0, Math.Min(value.Length, length));
        return result;
    }
0
RitchieD
using Microsoft.visualBasic;

 public class test{
  public void main(){
   string randomString = "Random Word";
   print (Strings.right(randomString,4));
  }
 }

出力は「Word」です

0
Steve Short
//s - your string
//n - maximum number of right characters to take at the end of string
(new Regex("^.*?(.{1,n})$")).Replace(s,"$1")
0
vldmrrr