সি # ব্যবহার করে কীভাবে নেতৃস্থানীয় শূন্যগুলি সরিয়ে ফেলা যায়


134

সি # ব্যবহার করে স্ট্রিংগুলিতে শীর্ষস্থানীয় জিরোগুলি কীভাবে সরিয়ে ফেলবেন?

নিম্নলিখিত সংখ্যাগুলিতে উদাহরণস্বরূপ, আমি সমস্ত নেতৃস্থানীয় শূন্যগুলি সরাতে চাই।

0001234
0000001234
00001234

3
'nvarchar ডেটাটাইপ' দ্বারা আমি ধরে নিচ্ছি আপনার অর্থ স্ট্রিং।
রায়

এবং 'সি' এর অর্থ দাঁড়ায় 'সি #' ...
30

উত্তর:


151

উপরের কয়েকটি (বিশেষত যেগুলি ইন্টারএক্সএক্সের মাধ্যমে রূপান্তরিত হয়) পদ্ধতিগুলির জন্য কাজ করবে না, এটি এনভিচারচার কতটা দীর্ঘ তার উপর নির্ভর করে:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

এরকম কিছু হবে

String s ="0000058757843950000120465875468465874567456745674000004000".TrimStart(new Char[] { '0' } );
// s = "58757843950000120465875468465874567456745674000004000"

17
সমস্যাযুক্ত যখন strInput= "0000000";বা অনুরূপ। কারণ এটি একটি শূন্যের পরিবর্তে একটি খালি স্ট্রিং ফিরে আসবে।
অভ্রহামকুল

2
@ অভ্রাহামকুল যা স্ট্রিংয়ের দৈর্ঘ্য দেখে এবং "0"ট্রিমের পরে খালি থাকলে কেবল ফিরে এসে পরিচালনা করা যায়। বা ব্যবহার PadLeft(1, '0')
Cœur

310

এটি আপনার প্রয়োজনীয় কোড:

string strInput = "0001234";
strInput = strInput.TrimStart('0');

7
সমস্যাযুক্ত যখন strInput= "0000000";বা অনুরূপ
অব্রাহামকুল

@ এমজেয় কারণ এটি এক শূন্যের পরিবর্তে খালি স্ট্রিংটি ফিরিয়ে দেবে।
অব্রাহামকুল

22
@ অভ্রহামকুল এটি এখনও ঠিক যা করা উচিত তা করবে। একটি একক শূন্য ফেরানো ব্যতিক্রম হতে পারে এবং বিকাশকারী দ্বারা পরিচালনা করা উচিত।
ব্যবহারকারী 609926

12
strInput.TrimStart('0').PadLeft(1, '0');হ্যান্ডেল করা হবে "0000" > "0"
ক্রিস রম্প

30

একটি খালি স্ট্রিং ফিরিয়ে এড়াতে কোড (যখন ইনপুট "00000" এর মতো হয়)।

string myStr = "00012345";
myStr = myStr.TrimStart('0');
myStr = myStr.Length > 0 ? myStr : "0";

2
আসুন ধরে নেওয়া যাক যে স্ট্রিংটি খুব দীর্ঘ, কেন এটি দুটি বার ছাঁটাই করা উচিত? আপনি একটি পরিবর্তনশীল ছাঁটা স্ট্রিং সংরক্ষণ করতে পারেন
avrahamcool

@ অভ্রহামকুল, আপনার অর্থ কী, এটি দুবার ছাঁটাই কোথায়? মন্তব্যের জন্য ধন্যবাদ.
msysmilu

আহ, @ অভ্রহামকুল, সম্ভবত সে কারণেই আমি এটি সম্পাদনা করেছি :) শেষ পর্যন্ত এটি গণনার সময় বনাম একটি প্রশ্ন মেমরি; আমার ধারণা আজকের স্মৃতি এই ধরণের অ্যাপ্লিকেশনগুলিতে আর কোনও সমস্যা নয়
msysmilu

25

return numberString.TrimStart('0');


5
সমস্যাযুক্ত যখন numberString= "0000000";বা অনুরূপ
অব্রাহামকুল

1
@ এসএমএসিলু কারণ এটি একটি শূন্যের পরিবর্তে খালি স্ট্রিংটি ফিরিয়ে দেবে।
অব্রাহামকুল

1
আপনি ঠিক বলেছেন ঠিক আছে এরগো আমি এটি এড়ানোর জন্য একটি উত্তরের পরামর্শ দিয়েছিলাম
এমএসএমইলু

5

ট্রাই পার্সে যদি আপনার নম্বরটি ইন্টার 32.MaxValue এর চেয়ে কম হয় তবে কাজ করে । এটি আপনাকে খারাপ ফর্ম্যাট করা স্ট্রিংগুলি পরিচালনা করার সুযোগ দেয়। Int64.MaxValue এবং Int64.TryParse এর জন্য একই কাজ করে ।

int number;
if(Int32.TryParse(nvarchar, out number))
{
   // etc...
   number.ToString();
}

প্রশ্নের উদয় হিসাবে সম্ভবত ওভারকিল, এটি সমাধান যা আমি সন্ধান করছি এটি দশমিকের জন্য ডান-প্যাডযুক্ত শূন্যগুলি অপসারণের অনুমতি দেয় allows (দশমিক। ট্রাই পার্সে)
13:53

@ জে কে আমি জানি পোস্টটি পুরানো তবে আমি এই সমাধানটি সত্যিই পছন্দ করি কারণ এটি পরিষ্কার এবং খুব সহজেই বোঝা যায়। একটি মূল প্রেস ইভেন্টে কেবল একটি প্রশ্ন পাঠ্য পরিবর্তনের ঘটনাকেও আগুন ধরিয়ে দেবে - আমি কি সঠিক?
কেন

3

এই রেজেক্স আপনাকে এমন অঙ্কগুলির সাথে ভুল ফলাফল এড়াতে দেয় যা কেবল "0000" শূন্য থেকে আসে এবং যে কোনও দৈর্ঘ্যের অঙ্কগুলিতে কাজ করে:

using System.Text.RegularExpressions;

/*
00123 => 123
00000 => 0
00000a => 0a
00001a => 1a
00001a => 1a
0000132423423424565443546546356546454654633333a => 132423423424565443546546356546454654633333a
*/

Regex removeLeadingZeroesReg = new Regex(@"^0+(?=\d)");
var strs = new string[]
{
    "00123",
    "00000",
    "00000a",
    "00001a",
    "00001a",
    "0000132423423424565443546546356546454654633333a",
};
foreach (string str in strs)
{
    Debug.Print(string.Format("{0} => {1}", str, removeLeadingZeroesReg.Replace(str, "")));
}

এবং এই রেজেক্স স্ট্রিংয়ের ভিতরে যে কোনও জায়গায় নেতৃস্থানীয় জিরোগুলি সরিয়ে ফেলবে:

new Regex(@"(?<!\d)0+(?=\d)");
//  "0000123432 d=0 p=002 3?0574 m=600"
//     => "123432 d=0 p=2 3?574 m=600"


0
Regex rx = new Regex(@"^0+(\d+)$");
rx.Replace("0001234", @"$1"); // => "1234"
rx.Replace("0001234000", @"$1"); // => "1234000"
rx.Replace("000", @"$1"); // => "0" (TrimStart will convert this to "")

// usage
var outString = rx.Replace(inputString, @"$1");

5
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
নিক 3500

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