C # का उपयोग करके प्रमुख शून्य कैसे निकालें


134

C # का उपयोग करके तार में अग्रणी शून्य कैसे निकालें?

निम्न संख्याओं में उदाहरण के लिए, मैं सभी प्रमुख शून्य को हटाना चाहूंगा।

0001234
0000001234
00001234

3
'nvarchar datatype' द्वारा मुझे लगता है कि आपका मतलब स्ट्रिंग है।
रे

और 'C £' का अर्थ 'C #' है ...
T30

जवाबों:


151

यह वास्तव में निर्भर करता है कि NVARCHAR कब तक है, उपरोक्त में से कुछ के रूप में (विशेष रूप से जो IntXX के माध्यम से परिवर्तित होते हैं) विधियों के लिए काम नहीं करेंगे:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

ऐसा कुछ होगा

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

17
जब strInput= "0000000";या समान समस्याग्रस्त । क्योंकि यह एक शून्य के बजाय एक खाली स्ट्रिंग लौटाएगा।
अवरामहकूल

2
@avrahamcool जिसे स्ट्रिंग की लंबाई को देखते हुए और केवल "0"ट्रिम के बाद खाली होने पर वापस किया जा सकता है । या उपयोग कर रहे हैं PadLeft(1, '0')
Cœur

310

यह वह कोड है जिसकी आपको आवश्यकता है:

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

7
समस्याग्रस्त जब strInput= "0000000";या समान
avrahamcool

@ संजय क्योंकि यह एक शून्य के बजाय एक खाली स्ट्रिंग लौटाएगा।
avrahamcool

22
@avrahamcool यह अभी भी वही कर रहा है जो उसे करना चाहिए। एक भी शून्य लौटाना एक अपवाद होगा और इसे डेवलपर द्वारा नियंत्रित किया जाना चाहिए।
user609926

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

@avrahamcool, आपका क्या मतलब है, यह दो बार छंटनी कहां है? टिप्पणी के लिए धन्यवाद।
msysmilu

आह, @avhamccool, शायद इसीलिए मैंने इसे संपादित किया :) अंत में यह एक सवाल स्मृति बनाम कंप्यूट समय है; मुझे लगता है कि आज स्मृति इस तरह के अनुप्रयोगों में एक मुद्दा नहीं है
16

25

return numberString.TrimStart('0');


5
समस्याग्रस्त जब numberString= "0000000";या समान
avrahamcool

1
@msysmilu क्योंकि यह एक शून्य के बजाय एक खाली स्ट्रिंग लौटाएगा।
avrahamcool

1
@avrahamcool आप सही हैं। एर्गो आई ने इससे बचने के लिए एक सुझाव दिया
msysmilu

5

यदि आपका नंबर Int32.MaxValue से कम है, तो TryParse काम करता है । यह आपको बुरी तरह से स्वरूपित तारों को संभालने का अवसर भी देता है। Int64.MaxValue और Int64.TryParse के लिए समान काम करता है ।

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

शायद प्रश्न के लिए ओवरकोल करें, यह वह समाधान है जिसकी मुझे तलाश है क्योंकि यह दशमलव के लिए सही-गद्देदार जीरो को हटाने की भी अनुमति देता है। (दशमलव। त्रिपार्स)
१५:५४

@ जेके मुझे पता है कि पोस्ट पुरानी है लेकिन मुझे यह समाधान बहुत पसंद है क्योंकि यह साफ और समझने में बहुत आसान है। कुंजी प्रेस ईवेंट में टेक्स्ट को बदलने के बस एक प्रश्न से टेक्स्टचेनड इवेंट में भी आग लग जाएगी - क्या मैं सही हूं?
केन

3

यह Regex आपको अंकों के गलत परिणाम से बचने देता है जो केवल "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
भारत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.