স্ট্রিং ক্লাসে কোন পদ্ধতিটি কেবল প্রথম এন অক্ষরগুলি প্রদান করে?


184

আমি Stringক্লাসে একটি এক্সটেনশন পদ্ধতি লিখতে চাই যাতে ইনপুট স্ট্রিংটি প্রদত্ত দৈর্ঘ্যের চেয়ে দীর্ঘ হয় তবে Nকেবলমাত্র প্রথম Nঅক্ষর প্রদর্শিত হয়।

এটি দেখতে কেমন দেখাচ্ছে তা এখানে:

public static string TruncateLongString(this string str, int maxLength)
{
    if (str.Length <= maxLength)
        return str;
    else
        //return the first maxLength characters                
}

String.*()শুধুমাত্র প্রথম Nঅক্ষরগুলি পেতে আমি কোন পদ্ধতিটি ব্যবহার করতে পারি str?

উত্তর:


374
public static string TruncateLongString(this string str, int maxLength)
{
    if (string.IsNullOrEmpty(str))
        return str;
    return str.Substring(0, Math.Min(str.Length, maxLength));
}

6
ম্যাথ.মিন দরকার? আমি ভেবেছিলাম সাবস্ট্রিং জানত যে দ্বিতীয় পরামিতি দৈর্ঘ্যের চেয়ে বড় হলে এটি দৈর্ঘ্যে প্লাগ হয়েছে?
মার্টিন

12
আমি বিশ্বাস করি এটি হ'ল: System.String.InternSubStringWithChecks ArgumentOutOfRange নিক্ষেপ করবে।
পল রুয়ান

2
@ মার্টিন: আমি দেখতে পাচ্ছি না এমনটি startIndex > (this.Length - length)ছুঁড়েছে ArgumentOutOfRangeException
ব্যবহারকারী 7116

2
আমি Math.Min(str.Length, maxLength) == str.Lengthযদি আপনি "স্ট্রের প্রথম স্ট্রিং লম্বা অক্ষর" ফিরিয়ে দেওয়ার জন্য একটি অযৌক্তিক স্ট্রিং তৈরি শেষ করেন কিনা তা পরীক্ষা করে দেখার পরামর্শ দিচ্ছি , তবে সাবস্ট্রিং আপনার জন্য এটি পরীক্ষা করে এবং আপনি return thisপুরো স্ট্রিংয়ের জন্য জিজ্ঞাসা করেছেন কিনা তা ঠিক করে দেয় ।
স্টিভেমসন

2
আপনি যদি চান যে এক্সটেনশন পদ্ধতিটি সম্ভাব্য নাল স্ট্রিংগুলিতে কাজ করবে ... ফিরে এসআর?
ইহাকে

62
string truncatedToNLength = new string(s.Take(n).ToArray());  

এই সমাধানটিতে একটি ক্ষুদ্র বোনাস রয়েছে যদি এন s.Length এর চেয়ে বড় হয় তবে এটি এখনও সঠিক জিনিসটি করে।


9
হ্যাঁ, তবে লিংক ব্যবহার করে স্ট্রিং কেটে ফেলছেন? লুপের মতো অনেকবার ব্যবহার করা হলে এটি খুব খারাপভাবে সঞ্চালন করবে সে সম্পর্কে সচেতন থাকুন। অভ্যাসের বিষয় হিসাবে এটি করবেন না
এরিক

31

আপনি লিনকিউ str.Take(n)বা str.SubString(0, n)যেখানে ব্যবহার করতে পারেন এটি ব্যবহার করতে পারেনArgumentOutOfRangeException জন্য ব্যতিক্রমn > str.Length

মনে রাখবেন যে LINQ সংস্করণ একটি ফেরৎ IEnumerable<char>, তাই আপনি রূপান্তর করতে চাই IEnumerable<char>থেকে string: new string(s.Take(n).ToArray())


10
স্ট্রিংগুলি কাটাতে লিনক ব্যবহার করবেন না। যে হাস্যকর.
এরিক

17

যখনই আমাকে সি # তে স্ট্রিং ম্যানিপুলেশন করতে হবে, আমি ভিজুয়াল বেসিক থেকে ভাল পুরানো Leftএবং Rightফাংশনগুলি মিস করি , যা ব্যবহার করা সহজ Substring

সুতরাং আমার বেশিরভাগ সি # প্রকল্পে আমি তাদের জন্য এক্সটেনশন পদ্ধতি তৈরি করি:

public static class StringExtensions
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }

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

নোট: অংশ নেই, কারণ একটি ছোঁড়ার যখন ইনপুট স্ট্রিং এর দৈর্ঘ্য ইতিমধ্যে পূর্ববর্তী উত্তর অধীনে কিছু মন্তব্য উল্লেখ অনুরোধ দৈর্ঘ্যের চেয়ে ছোট।
Math.MinSubstringArgumentOutOfRangeException

ব্যবহার:

string longString = "Long String";

// returns "Long";
string left1 = longString.Left(4);

// returns "Long String";
string left2 = longString.Left(100);

আমি এটি পছন্দ করি তবে স্ট্রিং যদি প্রদত্ত দৈর্ঘ্যের চেয়ে কম হয় তবে এটি স্পেসগুলি যুক্ত করবে না। public static string Left(this string str, int length) { var Result = str.Substring(0, Math.Min(length, str.Length)); return (Result.Length < length) ? Result.PadRight(length) : Result; }
গ্র্যান্ডাইজার

strনাল
liviiniu

14

কেবল:

public static String Truncate(String input,int maxLength)
{
   if(input.Length > maxLength)
      return input.Substring(0,maxLength);
   return input;
}

7
public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}

1
এছাড়াও, নোট করুন যে আপনি শর্তটি পরিবর্তন করে এক্সটেনশন পদ্ধতিটি নাল- str == null || str.Length <= maxLength
নিরাপদও

6
যে কেউ ভাল Removeবা Substringভাল কিনা তা নিয়ে ভাবছেন , কোনও পার্থক্য নেই। সীমাবদ্ধতা পরীক্ষা Remove(maxLength)করার Substring(0,maxLength)পরে কেবল কল । আপনি যা পছন্দ করেন তার উপর নির্ভর করে আপনি "প্রথম সর্বাধিক অক্ষরগুলি গ্রহণ করুন" বা "সর্বোচ্চ দৈর্ঘ্যের অক্ষরের পরে সমস্ত কিছু ফেলে দিন" হিসাবে কাটাকাটি ভাবেন কিনা তার উপর নির্ভর করে। অবশ্যই এটি উভয় তাই এটি আপনার উপর নির্ভর করে।
স্টিভেমসন 14

5

যদি আমরা বৈধতার বিষয়ে কথা বলি তবে কেন আমরা নাল স্ট্রিং এন্ট্রিগুলি পরীক্ষা করে নি। কোন নির্দিষ্ট কারণ?

আমি নীচের উপায়ে মনে করি যেহেতু ইসনুলআরএম্পটি একটি সিস্টেম সংজ্ঞায়িত পদ্ধতি এবং টেরিনারি অপারেটরগুলির মধ্যে চক্রবৃত্তীয় জটিলতা = 1 থাকে তবে () {} অন্য {value এর মান 2 থাকে।

    public static string Truncate(string input, int truncLength)
    {
        return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
                   ? input.Substring(0, truncLength)
                   : input;
    }

সাইক্লোমেটিক জটিলতা 2 একটি সমস্যা কি?
মুফ্লিক্স

1

আমি এটি আমার প্রকল্পে যুক্ত করেছি কারণ আমি যেখানে এটি ব্যবহার করছি এটি লুপগুলিতে ব্যবহার করার একটি উচ্চ সম্ভাবনা, অনলাইনে হোস্ট করা একটি প্রকল্পে তাই আমি যদি এটি পরিচালনা করতে পারি তবে আমি কোনও ক্র্যাশ চাইনি। দৈর্ঘ্য আমার একটি কলামে ফিট করে। এটি সি # 7

কেবল একটি লাইন:

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";

0

.NET সাবস্ট্রিং পদ্ধতি বিপদে পরিপূর্ণ। আমি এক্সটেনশন পদ্ধতিগুলি তৈরি করেছি যা বিভিন্ন ধরণের পরিস্থিতিতে পরিচালনা করে। সুন্দর জিনিসটি এটি আসল আচরণটি সংরক্ষণ করে তবে আপনি যখন একটি অতিরিক্ত "সত্য" পরামিতি যুক্ত করেন, তখন এটি ব্যতিক্রমটি পরিচালনা করতে এক্সটেনশন পদ্ধতিতে পুনরূদ্ধার করে এবং সূচি এবং দৈর্ঘ্যের উপর ভিত্তি করে সর্বাধিক যৌক্তিক মান দেয় returns উদাহরণস্বরূপ, যদি দৈর্ঘ্য নেতিবাচক হয়, এবং পিছনে গণনা করা হয়। আপনি পরীক্ষার ফলাফলগুলি দেখতে পাবেন বিভিন্ন ধরণের মানের সাথে এই ফিডলটিতে: https://dotnetfiddle.net/m1mSH9 । এটি কীভাবে সাবস্ট্রিংগুলি সমাধান করে সে সম্পর্কে একটি পরিষ্কার ধারণা দেবে।

আমি সবসময় আমার সমস্ত প্রকল্পগুলিতে এই পদ্ধতিগুলি যুক্ত করি এবং কোড ব্রেকিং নিয়ে কখনই চিন্তা করতে হবে না কারণ কিছু পরিবর্তন হয়েছে এবং সূচকটি অবৈধ। নীচে কোড দেওয়া আছে।

    public static String Substring(this String val, int startIndex, bool handleIndexException)
    {
        if (!handleIndexException)
        { //handleIndexException is false so call the base method
            return val.Substring(startIndex);
        }
        if (string.IsNullOrEmpty(val))
        {
            return val;
        }
        return val.Substring(startIndex < 0 ? 0 : startIndex > (val.Length - 1) ? val.Length : startIndex);
    }

    public static String Substring(this String val, int startIndex, int length, bool handleIndexException)
    {
        if (!handleIndexException)
        { //handleIndexException is false so call the base method
            return val.Substring(startIndex, length);
        }
        if (string.IsNullOrEmpty(val))
        {
            return val;
        }
        int newfrom, newlth, instrlength = val.Length;
        if (length < 0) //length is negative
        {
            newfrom = startIndex + length;
            newlth = -1 * length;
        }
        else //length is positive
        {
            newfrom = startIndex;
            newlth = length;
        }
        if (newfrom + newlth < 0 || newfrom > instrlength - 1)
        {
            return string.Empty;
        }
        if (newfrom < 0)
        {
            newlth = newfrom + newlth;
            newfrom = 0;
        }
        return val.Substring(newfrom, Math.Min(newlth, instrlength - newfrom));
    }

আমি এর পিছনে মে 2010 এ এই সম্পর্কে ব্লগ করেছি: http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html


0

আংশিকভাবে সংক্ষিপ্তকরণের জন্য (লিনকিউ সমাধান ব্যতীত), এখানে দুটি ওয়ান-লাইনার int maxLengthরয়েছে যা নেতিবাচক মানগুলিকে অনুমোদিত করার নীতি এবং নাল স্ট্রিংয়ের ক্ষেত্রেও সম্বোধন করে:

  1. Substringউপায় (থেকে পল Ruane এর উত্তর ):
public static string Truncate(this string s, uint maxLength) =>
    s?.Substring(0, Math.Min(s.Length, (int)maxLength));
  1. Removeউপায় (থেকে kbrimington এর উত্তর ):
public static string Truncate(this string s, uint maxLength) =>
    s?.Length > maxLength ? s.Remove((int)maxLength) : s;


-4

string.Substring (0, এন); // 0 - সূচী শুরু করুন এবং এন - অক্ষরের সংখ্যা


4
গৃহীত উত্তরের মতো নয়, এর ফলে সীমাবদ্ধতার ত্রুটির বাইরে সূচি হতে পারে।
পরিবেশন করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.