আমি C#এর একটি স্ট্রিং থেকে শেষ চারটি অক্ষর কীভাবে পেতে পারি?




string (12)

ধরুন আমার একটি স্ট্রিং আছে:

string mystring = "34234234d124";

আমি এই স্ট্রিং এর শেষ চারটি অক্ষর পেতে চাই যা "d124" । আমি SubString ব্যবহার করতে পারেন, কিন্তু এটি কোড লাইন একটি দম্পতি প্রয়োজন।

C # এর সাথে একটি অভিব্যক্তিতে এই ফলাফলটি পাওয়া সম্ভব?


আপনাকে যা করতে হবে তা হল ..

String result = mystring.Substring(mystring.Length - 4);

আপনি একটি এক্সটেনশান পদ্ধতি ব্যবহার করতে পারেন:

public static class StringExtension
{
    public static string GetLast(this string source, int tail_length)
    {
       if(tail_length >= source.Length)
          return source;
       return source.Substring(source.Length - tail_length);
    }
}

এবং তারপর কল করুন:

string mystring = "34234234d124";
string res = mystring.GetLast(4);

আমি বিভিন্ন সূত্র থেকে কিছু কোড সংশোধন করেছি যা আপনি চান ফলাফল পাবেন, এবং আরো অনেক কিছু ছাড়াও। আমি নেতিবাচক int মানগুলির জন্য মঞ্জুরিপ্রাপ্ত, int মানগুলি যা স্ট্রিংের দৈর্ঘ্য অতিক্রম করে, এবং শেষ সূচক সূচকের সূচকের চেয়ে কম। যে শেষ ক্ষেত্রে, পদ্ধতি একটি বিপরীত ক্রম substring ফেরত। প্রচুর মন্তব্য আছে, কিন্তু কিছু অস্পষ্ট বা শুধু পাগল যদি আমাকে জানাতে। আমি এইটার জন্য কি ব্যবহার করতে পারি তা দেখতে চারপাশে ঘুরে বেড়াচ্ছি।

    /// <summary>
    /// Returns characters slices from string between two indexes.
    /// 
    /// If start or end are negative, their indexes will be calculated counting 
    /// back from the end of the source string. 
    /// If the end param is less than the start param, the Slice will return a 
    /// substring in reverse order.
    /// 
    /// <param name="source">String the extension method will operate upon.</param>
    /// <param name="startIndex">Starting index, may be negative.</param>
    /// <param name="endIndex">Ending index, may be negative).</param>
    /// </summary>
    public static string Slice(this string source, int startIndex, int endIndex = int.MaxValue)
    {
        // If startIndex or endIndex exceeds the length of the string they will be set 
        // to zero if negative, or source.Length if positive.
        if (source.ExceedsLength(startIndex)) startIndex = startIndex < 0 ? 0 : source.Length;
        if (source.ExceedsLength(endIndex)) endIndex = endIndex < 0 ? 0 : source.Length;

        // Negative values count back from the end of the source string.
        if (startIndex < 0) startIndex = source.Length + startIndex;
        if (endIndex < 0) endIndex = source.Length + endIndex;         

        // Calculate length of characters to slice from string.
        int length = Math.Abs(endIndex - startIndex);
        // If the endIndex is less than the startIndex, return a reversed substring.
        if (endIndex < startIndex) return source.Substring(endIndex, length).Reverse();

        return source.Substring(startIndex, length);
    }

    /// <summary>
    /// Reverses character order in a string.
    /// </summary>
    /// <param name="source"></param>
    /// <returns>string</returns>
    public static string Reverse(this string source)
    {
        char[] charArray = source.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }

    /// <summary>
    /// Verifies that the index is within the range of the string source.
    /// </summary>
    /// <param name="source"></param>
    /// <param name="index"></param>
    /// <returns>bool</returns>
    public static bool ExceedsLength(this string source, int index)
    {
        return Math.Abs(index) > source.Length ? true : false;
    }

সুতরাং যদি আপনার কাছে একটি স্ট্রিং থাকে তবে "এটি একটি এক্সটেনশান পদ্ধতি", এখানে কিছু উদাহরণ এবং ফলাফল আশা করা হয়।

var s = "This is an extension method";
// If you want to slice off end characters, just supply a negative startIndex value
// but no endIndex value (or an endIndex value >= to the source string length).
Console.WriteLine(s.Slice(-5));
// Returns "ethod".
Console.WriteLine(s.Slice(-5, 10));
// Results in a startIndex of 22 (counting 5 back from the end).
// Since that is greater than the endIndex of 10, the result is reversed.
// Returns "m noisnetxe"
Console.WriteLine(s.Slice(2, 15));
// Returns "is is an exte"

আশা করছি এই সংস্করণ কেউ সহায়ক। যদি আপনি কোনও নেতিবাচক সংখ্যা ব্যবহার না করেন তবে এটি স্বাভাবিকের মতো পরিচালনা করে এবং পরিসীমা প্যারামিটারগুলির জন্য ডিফল্ট সরবরাহ করে।


এই কোনো দৈর্ঘ্য স্ট্রিং জন্য ব্যর্থ হবে না।

string mystring = "34234234d124";
string last4 = Regex.Match(mystring, "(?!.{5}).*").Value;
// last4 = "d124"
last4 = Regex.Match("d12", "(?!.{5}).*").Value;
// last4 = "d12"

এটি সম্ভবত টাস্কের জন্য কার্যকরী হয়, তবে অতিরিক্ত বৈধতা প্রয়োজন হলে, এটি সম্ভবত নিয়মিত অভিব্যক্তিতে যোগ করা যেতে পারে।

সম্পাদনা: আমি মনে করি এই regex আরো দক্ষ হবে:

@".{4}\Z"

একটি সহজ সমাধান হবে:

string mystring = "34234234d124";
string last4 = mystring.Substring(mystring.Length - 4, 4);

এখানে আরও একটি বিকল্প যা খুব খারাপভাবে সঞ্চালন করা উচিত নয় ( মুলতুবি কার্যকরকরণের কারণে):

new string(mystring.Reverse().Take(4).Reverse().ToArray());

যদিও mystring.Last(4) উদ্দেশ্যে একটি এক্সটেনশন পদ্ধতি স্পষ্টভাবে পরিষ্কার সমাধান, যদিও একটু বেশি কাজ।


কিছু পূর্ববর্তী উত্তরগুলির তুলনায়, মূল পার্থক্য হলো ইনপুট স্ট্রিংয়ের সময় কোডের এই অংশটি বিবেচনায় নেয়:

  1. খালি
  2. অনুরোধ দৈর্ঘ্যের চেয়ে দীর্ঘতর বা মিলিত
  3. অনুরোধ দৈর্ঘ্যের চেয়ে ছোট।

এটা এখানে:

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

    public static string MyLast(this string str, int length)
    {
        if (str == null)
            return null;
        else if (str.Length >= length)
            return str.Substring(str.Length - length, length);
        else
            return str;
    }
}

ঠিক আছে, তাই আমি দেখেছি এটি একটি পুরানো পোস্ট, তবে কেন আমরা ফ্রেমওয়ার্কটি ইতিমধ্যে প্রদান করা কোডটি পুনর্লিখন করছি?

আমি আপনাকে ফ্রেমওয়ার্ক DLL "মাইক্রোসফ্ট। ভিসুয়ালবাসিক"

using Microsoft.VisualBasic;
//...

string value = Strings.Right("34234234d124", 4);

সংজ্ঞা:

public static string GetLast(string source, int last)
{
     return last >= source.Length ? source : source.Substring(source.Length - last);
}

ব্যবহার:

GetLast("string of", 2);

ফলাফল:

এর


Substring ব্যবহার করে আসলে বেশ সংক্ষিপ্ত এবং পঠনযোগ্য হয়:

 var result = mystring.Substring(mystring.Length - Math.Min(4, mystring.Length));
 // result == "d124"

string mystring = "34234234d124";
mystring = mystring.Substring(mystring.Length-4)

mystring = mystring.Length > 4 ? mystring.Substring(mystring.Length - 4, 4) : mystring;




string