C # তে একটি স্ট্রিং থেকে শেষ অক্ষরগুলি সরান। একটি মার্জিত উপায়?


84

আমার কাছে এর মতো একটি সংখ্যাযুক্ত স্ট্রিং রয়েছে 2223,00। আমি এটিকে রূপান্তর করতে চাই 2223। এটি: " , " এর পরে তথ্য ছাড়াই । ধরে নিন যে " , " এর পরে কেবলমাত্র দুটি দশমিক হবে ।

আমি করেছিলাম:

str = str.Remove(str.Length - 3, 3);

এর থেকেও কি আরও সুন্দর সমাধান? অন্য কোন ফাংশন ব্যবহার করছেন? -আমি স্পষ্ট সংখ্যা লাগাতে চাই না-

উত্তর:


173

আপনি প্রকৃতপক্ষে অপসারণ ওভারলোডটি ব্যবহার করতে পারেন যা একটি প্যারামিটার নেয়:

str = str.Remove(str.Length - 3);

তবে, আপনি যদি দৈর্ঘ্যটি কঠোরভাবে কোডিং এড়ানোর চেষ্টা করছেন তবে আপনি ব্যবহার করতে পারেন:

str = str.Remove(str.IndexOf(','));

আমি অনেক ভাল উত্তর পেয়েছি। কমনীয়তার ক্ষেত্রে এটিই আমি ব্যবহার করব। তবুও, আমি জানি না, নিম্ন স্তরে , কোনটি আরও দক্ষ। সুতরাং, আপনার পছন্দ করুন!
কানি

6
দ্বিতীয় সমাধানটি পড়া, বুঝতে এবং বজায় রাখা সহজতর এবং নিম্ন স্তরের পারফরম্যান্সের ক্ষেত্রে পার্থক্যটি অবিশ্বাস্যভাবে তুচ্ছ। আপনি যদি জানেন যে ,সর্বদা অবস্থান -3 এ থাকে তবে প্রথম সমাধানটি এখনও ঠিক আছে তবে অকাল অনুকূলকরণ আপনার সময় নষ্ট করা একটি ভয়ানক জিনিস terrible
স্কট রিপ্পি

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

মনে করুন আপনি কমা না থাকলে স্ট্রিংটি অপরিশোধিত করতে চান?
কাইল ডেল্যানি

15

সম্ভবত এটি:

str = str.Split(",").First();

আমি মনে করি এটি উত্তরের "সবচেয়ে মার্জিত" - কমপক্ষে এখনও পর্যন্ত।
টম বুশেল

4
@ রিডকপিসি সম্পর্কে আপনি কী জিনিস? আমি মনে করি খুব ভাল একটি।
কনি

@ কানি: কমনীয়তার দিক থেকে আমি বেশিরভাগ উত্তর যথেষ্ট ভাল পোস্ট করেছি । আমি যদি পারফরম্যান্স নিয়ে বিরক্ত হই না, যদি না এটি সত্যই বাধা হিসাবে প্রমাণিত হয়। কেবলমাত্র বিবেচনার বিষয় আপনি কীভাবে বিভিন্ন বিন্যাসে আসা স্ট্রিংগুলি মোকাবেলা করতে চান ...
কিমি

একটি দ্বিতীয় যুক্তি ক্ষণস্থায়ী বিবেচনা 2করতে Splitকারণ আপনার কোনও কমা যত্ন সম্পর্কে না।
রিচার্ড

5

কমা পরে সমস্ত কিছু বাদ দিয়ে এটি আপনার কাছে ফিরে আসবে return

str = str.Substring(0, str.IndexOf(','));

অবশ্যই, এটি ধরে নিয়েছে আপনার স্ট্রিংয়ে আসলে দশমিকের সাথে কমা রয়েছে। উপরের কোডটি যদি এটি না করে তবে ব্যর্থ হবে। আপনি আরও চেক করতে চান:

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

আমি ধরে নিচ্ছি আপনি শুরু করার সাথে একটি স্ট্রিং নিয়ে কাজ করছেন। আদর্শভাবে, আপনি যদি শুরুতে কোনও সংখ্যা নিয়ে কাজ করছেন, যেমন একটি ফ্লোট বা ডাবল, আপনি কেবল এটিকে একটি কাস্ট করতে পারেন int, তারপরে myInt.ToString()এইভাবে করুন:

myInt = (int)double.Parse(myString)

এটি বর্তমান সংস্কৃতি ব্যবহার করে দ্বিগুণকে পার্স করে (এখানে মার্কিন যুক্তরাষ্ট্রে আমরা .দশমিক পয়েন্ট ব্যবহার করি )। তবে এটি আবার ধরে নেয় যে আপনার ইনপুট স্ট্রিংটি পার্স করা যায়।


3
String.Format("{0:0}", 123.4567);      // "123"

যদি আপনার প্রাথমিক মান একটি দশমিক দশমিক হয় তবে আপনাকে রূপান্তর করতে হবে

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

এই উদাহরণে, আমি ইনভারেন্টাল সংস্কৃতি বেছে নিই তবে আপনি নিজের পছন্দটি ব্যবহার করতে পারেন।

আমি ফর্ম্যাটিং ফাংশনটি ব্যবহার করতে পছন্দ করি কারণ আপনি কখনই জানেন না যে দশমিকটিতে ভবিষ্যতে 2 বা 3 শীর্ষস্থানীয় সংখ্যা থাকতে পারে।

সম্পাদনা: আপনি Truncate, বা পরে সমস্ত অপসারণ করতেও ব্যবহার করতে পারেন।

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));

ভাল, আমি এই ক্ষেত্রে একই নম্বর পেয়েছি, শুভ্র পাচ্ছি, এটির কোমা it
কানি

আপনি সঠিক স্ট্রিংটি কী ব্যবহার করেন এবং আপনার কম্পিউটারটি কোন সংস্কৃতি?
প্যাট্রিক দেশজার্ডিনস

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

আমি জানি না যে আমি স্ট্রিংটি ব্যবহার করব personally ব্যক্তিগতভাবে এটি করার জন্য ফরম্যাট। এটি কাজ করার সময়, এটি স্ট্রিংয়ে যাওয়ার আগে ডাবল বক্সিংটি সরিয়ে ফেলেছে Forফর্ম্যাট, সুতরাং একটি অতিরিক্ত বস্তু তৈরি করে।
ক্রিস্টোফার কারেনস

আমাকে বলতে হবে যে স্ট্রিং (সাবস্ট্রিং) বা বক্সিংয়ের সাথে খেলার মধ্য দিয়ে পারফরম্যান্সের ক্ষেত্রে আরও ভাল কী তা আমি জানি না। আমি যদি এটি নিবিড়ভাবে ব্যবহার না করা হয় তবে এটি সত্যিই গুরুত্বপূর্ণ বলে আমি মনে করি না। পরিস্থিতি নির্ভর করুন :)
প্যাট্রিক দেশজার্ডিনস

1

ব্যবহার:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

আমি এখানে দুটি কারণে বাড়ানোর পদ্ধতি পছন্দ করি:

  1. আমি এটি সাবস্ট্রিংয়ের সাথে চেইন করতে পারি। Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. দ্রুততা.

1

স্টিংয়ের মধ্যে কমাটির সর্বশেষ সূচকের বামে সমস্ত অক্ষর পেতে সম্মিলিতভাবে আপনি লাস্টইন্ডেক্সঅফ এবং সাবস্ট্রিং ব্যবহার করতে পারেন।

স্ট্রিং var = var.Substring (0, var.LastIndexOf (','));


0

আপনি ব্যবহার করতে পারেন TrimEnd। এটি পাশাপাশি দক্ষ এবং পরিষ্কার দেখায়।

"Name,".TrimEnd(',');

4
এটি কেবল স্ট্রিংয়ের শেষে থাকা যে কোনও ',' অক্ষর মুছে ফেলবে। যেহেতু "123,45" স্ট্রিংটি সংখ্যাগুলির সাথে শেষ হয়, "123,45".TrimEnd(',')"123,45" ফিরে আসবে।
ফুগ

Remove last characters from a string if this character is... শুধু আমাকে ভাল ফিট করে। প্রশংসা "oppa/ ".Trim().TrimEnd('/');
it3xl


-3

সর্বশেষআইডেক্সফ ব্যবহার করুন। পছন্দ:

string var = var.lastIndexOf(',');

var একটি পরিবর্তনশীল নাম। এটি কোনও স্ট্রিংয়ের নাম হিসাবে কখনও ব্যবহার করা উচিত নয়। -1; অতিরিক্তভাবে এটি কেবল সূচক দেয়, সুতরাং এটি কেবল সমস্যার অংশটি সমাধান করে। আপনার সরানোর প্রয়োজন ()।
প্যাট্রিক নট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.