স্ট্রিং থেকে কেবল ডানদিকে n টি অক্ষর বের করুন


110

আমি কীভাবে এক্সট্রাক্ট করতে পারি substringঅন্যের কাছ থেকে ডানদিকের ছয়টি বর্ণের সমন্বয়ে তৈরি এমন অক্ষরstring ?

উদাঃ আমার স্ট্রিংটি "PER 343573" । এখন আমি কেবল নিষ্কাশন করতে চাই "343573"

কিভাবে আমি এটি করতে পারব?


আপনি VB.NET রাইট পদ্ধতির জন্য উত্স কোডটি ব্যবহার করতে পারেন। আপনাকে প্রথমে সি # তে রূপান্তরিত করতে হবে: রেফারেন্সসোর্স.মাইক্রোসফট / #
ড্যারেন গ্রিফিথ

তবে ভিবি কোড স্ট্রিংস.এস-এর সি # সাবস্ট্রিং ফাংশনের উপর নির্ভর করে
আমাদের ম্যান

এটি করার পক্ষে এটি খুব ভাল উপায় নয় তবে আপনি যদি এক চিমটিতে থাকেন তবে আপনি মাইক্রোসফ্ট.ভিউজুয়ালবাসিক.ডিলের সাথে একটি উল্লেখ যুক্ত করতে পারেন এবং সঠিক পদ্ধতিটি ব্যবহার করতে পারেন। এটি কোনও এক্সটেনশন পদ্ধতি নয়। আপনাকে এটির মতো এটি ব্যবহার করতে হবে:string endOfString = Strings.Right(wholeString, 6);
অ্যালান ম্যাকবি - এমএসএফটি

উত্তর:


156
string SubString = MyString.Substring(MyString.Length-6);

35
স্ট্রিং প্রয়োজনীয় অক্ষরের সংখ্যার মতো দীর্ঘ না হলে এই এপ্রোচ সঠিকভাবে কাজ করে না।
স্টিভিপওয়েল

1
ওপি ঠিক কী চায় তার উপর নির্ভর করে এই সময়ে নিয়মিত ভাব প্রকাশ করতে পারে। যদি তবে? তিনি কেবল স্ট্রিংয়ের শেষে নম্বরটি চান, এটি অবশ্যই সবচেয়ে বেদনাবিহীন সমাধান, বিশেষত যখন পরবর্তীকালের সফ্টওয়্যার আপগ্রেডে অঙ্কগুলির সংখ্যা পৃথক হতে পারে।
জোয়

2
@ জোহানেস রাসেল - আমি নিয়মিত প্রকাশের একটি বড় অনুরাগী (আমার উত্তরগুলি দেখুন), তবে আমি এ জাতীয় কোনও সাধারণ পরিস্থিতির জন্য তাদের কখনই ফিরিয়ে আনতে পারি না। ফাংশন র‌্যাপার ব্যবহার করা যে কোনও উত্তর একটি নিয়মিত অভিব্যক্তির চেয়ে কোড রক্ষণাবেক্ষণের জন্য আরও উপযুক্ত better একটি এক্সটেনশন পদ্ধতি (বা .NET 2.0 হলে স্ট্যান্ডার্ড ফাংশন) হ'ল সেরা সমাধান।
স্টিভীপওয়েল

@ স্টিভো 3000 - এমন একটি সমাধান রয়েছে যা যদি স্ট্রিংটি ভুল দৈর্ঘ্যের হয় তবে এটি কার্যকর সমাধান। একমাত্র সমাধান নয়, তবে এখনও।
মারক এল।

3
@ জেমস - ঠিক নৈর্ব্যক্তিকতা হতে, কেবলমাত্র শিরোনাম "এন অক্ষর" উল্লেখ করা হয়েছে। প্রকৃত প্রশ্নটি জিজ্ঞাসা করা হয়েছিল "সঠিকতম ছয়টি অক্ষর" জন্য :) :)
ক্রিস রজার্স

69

Right(n);ফাংশনটি প্রকাশ করতে একটি এক্সটেনশন পদ্ধতি লিখুন । ফাংশনটি খালি স্ট্রিং ফিরিয়ে দেওয়া নাল বা ফাঁকা স্ট্রিংয়ের সাথে ডিল করা উচিত, মূল স্ট্রিংটি সর্বাধিক দৈর্ঘ্যের চেয়ে কম স্ট্রিং এবং ডানদিকের অক্ষরের সর্বাধিক দৈর্ঘ্য ফেরত সর্বাধিক দৈর্ঘ্যের চেয়ে বেশি স্ট্রিং থাকে।

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;
}

সূচনা সূচকটি 0 এরও কম হতে পারে না।
জেমস

2
@ জেমস - sValue.Length > iMaxLengthসাবস্ট্রিং বলা হওয়ার আগে এটি হবে না !
স্টিভীপওয়েল

3
দুর্দান্ত উত্তর, তবে সি # কোডে হাঙ্গেরিয়ান নোটেশনটি দেখতে ডাবল-টেকের কিছুটা ছিল।
জেরাদ রোজ

1
@ জেরাদরোজ - আমি এমন একটি প্রকল্পে কাজ করি যেখানে কোনও ভিবি 3 অ্যাপ্লিকেশন থেকে কোড বেসটি বিকশিত হয়েছিল (এর বেশিরভাগটি ভিবি.এনইটি) তাই কিছু অবশিষ্টাংশ রয়েছে।
স্টিভিপওয়েল

4
@ জ্যালে, ভিবি.এনইটির শীর্ষ-স্তরের ফাংশন হিসাবে বাম, ডান এবং মাঝখানে রয়েছে আরও অনেকগুলি সহায়ক জিনিস যা সি # এর অংশ নয়। নিশ্চিত না কেন, তাদের বেশিরভাগই সুনির্দিষ্ট ফাংশন।
ingredient_15939

40

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

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

ব্যবহার

string myStr = "PER 343573";
string subStr = myStr.Right(6);

19
তারপরে এটি একটি নালারফেরান ধারণাটি নিক্ষেপ করবে ঠিক যেমন আপনি যদি নাল স্ট্রিংয়ের কোনও পদ্ধতি ব্যবহার করার চেষ্টা করেন ...
জেমস

1
str.Length - lengthনেতিবাচক হতে পারে। এছাড়াও দ্বিতীয় প্যারামিটারটি alচ্ছিক। দৈর্ঘ্য পাস করার প্রয়োজন নেই।
iheartcsharp

1
@ জেএমএস ১০ অবশ্যই এটি হতে পারে তবে আমার চেয়ে কলকারীদের বেশি উদ্বেগ রয়েছে। এছাড়াও, হ্যাঁ ন্যায্য পয়েন্ট, আপনি এখানে ওভাররাইড ব্যবহার করতে পারেন যা কেবলমাত্র একক প্যারামিটার নেয়।
জেমস

str? .Substring (str.Length - দৈর্ঘ্য, দৈর্ঘ্য);
লুডু

26
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
}

ত্রুটি হওয়া উচিত নয়, শূন্য স্ট্রিং হিসাবে নাল ফেরায়, ছাঁটাই বা বেস মানগুলি প্রদান করে। এটি "টেস্টেক্স" এর মতো ব্যবহার করুন L বাম (4) বা স্ট্রিয়র রাইট (12);



9

আপনি যদি আপনার স্ট্রিংয়ের দৈর্ঘ্যের বিষয়ে নিশ্চিত না হন তবে আপনি শব্দের গণনা সম্পর্কে নিশ্চিত (এই ক্ষেত্রে সর্বদা 2 টি শব্দ, 'xxx yyyyyy' এর মতো) আপনি আরও ভাল বিভাজন ব্যবহার করতে চান।

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

এটি সর্বদা আপনার স্ট্রিংয়ের দ্বিতীয় শব্দটি দেয়।


হ্যাঁ; আসুন কেবল ধরে নেওয়া যাক ওপির পাঠ্যটির সবসময় সাদা স্পেস থাকে; তার মধ্যে পছন্দ উদাহরণ :)
খ্রিস্টান

1
হাই ক্রিশ্চিয়ান :) আমরা সবাই উত্তরের কয়েকটি লাইন বেশি জানি। আমি কেবল প্রশ্নের সংক্ষিপ্তভাবে উত্তর দিয়েছি, অবশ্যই, বাস্তব কোডে আরও অনেক বিষয় বিবেচনা করা দরকার।
মাহদী তাহসিলদারি

7

এটি আপনি যা চেয়েছিলেন ঠিক তা নয়, তবে উদাহরণটির দিকে তাকালেই মনে হয় আপনি স্ট্রিংয়ের সংখ্যাসূচক অংশটি সন্ধান করছেন।

যদি এটি সর্বদা হয়, তবে এটি করার একটি ভাল উপায় হ'ল নিয়মিত ভাব প্রকাশ করা।

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

-1 নিয়মিত ভাবগুলি এই জাতীয় কোনও কিছুর জন্য একটু ওভারকিল হয়, বিশেষত যখন এটি করার জন্য পদ্ধতিতে ইতিমধ্যে তৈরি built
জেমস

1
আমি যদি এই পদ্ধতিটি ব্যবহার করার পক্ষে যুক্তি দিচ্ছি না যদি আপনার যদি সত্যিই কেবল শেষ 6 টির প্রয়োজন হয় তবে আপনার লক্ষ্য যদি ভবিষ্যতের কোনও সময়ে 5 বা 7 অঙ্কে পরিবর্তিত হতে পারে এমন একটি সংখ্যা (যেমন একটি আইডি) বের করতে হয় তবে এটি একটি ভাল উপায়।
শীতল 42

1
পুরানো উত্তর, তবে নিয়মিত অভিব্যক্তির ব্যবহারকে সমর্থন করার জন্য +1। বিশেষত যেহেতু। জেটগুলি করার জন্য। নেট এর স্ট্রিং বাস্তবায়নে (এখনও) কোনও অন্তর্নির্মিত পদ্ধতি নেই। অন্যথায়, এই প্রশ্নটি কখনও থাকতে পারে না।
ক্রেজিআইভান 1974

@ ক্রেজিআইভান ১৯74৪ নিশ্চিত নন কেন আপনি আপনার মন্তব্যে আমাকে উল্লেখ করেছেন
জেমস

5

এটা ব্যবহার কর:

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

পাঠ্য? .সুবস্ট্রিং (পাঠ্য। লম্বা - 6)
লুডো

5

আপনার প্রয়োজনীয়তা অনুমান করে তবে নিম্নলিখিত নিয়মিত অভিব্যক্তিটি স্ট্রিংটি শেষ হওয়ার আগে কেবল 6 টি বর্ণমালায় পাওয়া যাবে এবং অন্যথায় কোনও মিল নেই।

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

এই সমাধানটি কি যুক্তিসঙ্গতভাবে অস্পষ্ট প্রয়োজনীয়তা পূরণ করে না? যদি তা না হয় তবে দয়া করে আপনার ডাউন ভোটিংটি ব্যাখ্যা করুন।
ওয়েড

5

যেহেতু আপনি .NET ব্যবহার করছেন, যা সমস্ত এমএসআইএলকে সংকলিত করে , কেবল মাইক্রোসফ্ট.ভিজুয়ালবাসিক উল্লেখ করুন এবং মাইক্রোসফ্টের অন্তর্নির্মিত Strings.Rightপদ্ধতিটি ব্যবহার করুন :

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

কাস্টম এক্সটেনশন পদ্ধতি বা অন্য কাজ তৈরি করার দরকার নেই। ফলাফলটি একটি রেফারেন্স এবং একটি সাধারণ কোডের লাইন দিয়ে অর্জিত হয়।

এ সম্পর্কিত আরও তথ্য হিসাবে, সি # এর সাথে ভিজ্যুয়াল বেসিক পদ্ধতিগুলি অন্য কোথাও নথিভুক্ত করা হয়েছে । কোনও ফাইল বিশ্লেষণ করার চেষ্টা করার সময় আমি ব্যক্তিগতভাবে এটিতে প্রথমে হোঁচট খেয়েছি এবং ক্লাসটি .csv ফাইলগুলি পার্স করার জন্য অত্যন্ত দরকারী হিসাবে ক্লাসটি ব্যবহার করার বিষয়ে এই এসও থ্রেডটি পেয়েছি Microsoft.VisualBasic.FileIO.TextFieldParser


এই পদ্ধতির এখানে অন্য এসও থ্রেডেও
অ্যারন থমাস

এটাই মেন্টাল! কিন্তু ভিবি লোক হিসাবে, এটি একবারের জন্য সিএসার্পার্সের অধীনে ভাল লাগল!
স্টিভসিংক

5
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 স্ট্রিং । এবং, প্রথমটি দ্রুত এবং দ্বিতীয়টি আরও কমপ্যাক্ট।

আমি যদি দ্বিতীয়টি পছন্দ করি তবে জেনে রাখুন str সংক্ষিপ্ত স্ট্রিংযুক্ত । এটি দীর্ঘ স্ট্রিং যদি প্রথম এক আরও উপযুক্ত।

যেমন

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"

1
আমি সেই বিকল্পটি পছন্দ করি। ভার্বোস, তবে বুঝতে সহজ এবং স্ট্রিং-খুব-সংক্ষিপ্ত সমস্যাটি স্বয়ংক্রিয়ভাবে পরিচালনা করে।
অ্যান্ড্রু গ্রোথ

3

এটা ব্যবহার কর:

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



3

নাল নিরাপদ পদ্ধতি:

মূল স্ট্রিংটি সর্বাধিক দৈর্ঘ্যের চেয়ে ছোট স্ট্রিংগুলি

স্ট্রিং রাইট এক্সটেনশন পদ্ধতি

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));

2

আমি যে সমাধানটি ব্যবহার করি তা এখানে ... এটি যাচাই করে যে ইনপুট স্ট্রিংয়ের দৈর্ঘ্য জিজ্ঞাসিত দৈর্ঘ্যের চেয়ে কম নয়। আমি উপরে পোস্ট করা সমাধানগুলি দুর্ভাগ্যক্রমে বিবেচনায় নিই না - যা ক্রাশ হতে পারে।

    /// <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);
        }
    }

2

এই পদ্ধতিটি আমি ব্যবহার করি: আমি জিনিসগুলি সহজ রাখতে পছন্দ করি।

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


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

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

1
কোডটি কীভাবে এটি ওপিতে সমস্যাটিকে ঠিক করে দেয় সে সম্পর্কে একটি লিখিত ব্যাখ্যা সহকারে থাকতে হবে।
জেডে

1
ঠিক আছে, আমি ভেবেছিলাম মন্তব্যে লিখিত ব্যাখ্যা যথেষ্ট, না?
vldmrrr

0

বিট রূপান্তরকারী এবং বিট শিফটিংয়ের আশ্রয় ছাড়াই (এনকোডিংয়ের বিষয়টি নিশ্চিত হওয়া দরকার) এটি আমি দ্রুতগতির পদ্ধতিটি একটি এক্সটেনশন পদ্ধতি 'ডান' হিসাবে ব্যবহার করি।

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);
}

2
Array.Reverseএকটি অ্যারে নেয়, স্ট্রিং নয় এবং if (myString.length > 6)। সিনট্যাক্স ত্রুটিগুলি একদিকে রেখে, কেন এটি সবচেয়ে দ্রুত পদ্ধতি হবে? অবশ্যই কেবল স্ট্রস্ট্রিং ব্যবহার করা আরও ভাল উপায় হবে, এটির জন্য এই সমস্ত অনুলিপি লাগবে না।
1800 তথ্য

0

আমি নেতিবাচক পরিস্থিতি রোধ করতে এবং নাল স্ট্রিংগুলি পরিচালনা করতে মিনটি ব্যবহার করি

// <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
using Microsoft.visualBasic;

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

আউটপুট "শব্দ"

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