Cara menghapus nol depan menggunakan C #

134

Bagaimana cara menghapus nol terdepan dalam string menggunakan C #?

Sebagai contoh dalam angka-angka berikut, saya ingin menghapus semua nol terkemuka.

0001234
0000001234
00001234
Cur
sumber
3
oleh 'nvarchar datatype' Saya menganggap Anda maksud string.
Ray
Dan 'C £' adalah singkatan dari 'C #' ...
T30

Jawaban:

151

Ini benar-benar tergantung pada berapa lama NVARCHAR, karena beberapa metode di atas (terutama yang mengkonversi melalui IntXX) tidak akan bekerja untuk:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

Sesuatu seperti ini akan melakukannya

String s ="0000058757843950000120465875468465874567456745674000004000".TrimStart(new Char[] { '0' } );
// s = "58757843950000120465875468465874567456745674000004000"
Pukulan yg jitu
sumber
17
bermasalah kapan strInput= "0000000";atau serupa. karena itu akan mengembalikan string kosong daripada satu nol.
avrahamcool
2
@avrahamcool yang dapat ditangani dengan melihat panjang string dan kembali "0"jika kosong setelah trim. Atau menggunakan PadLeft(1, '0').
Cœur
310

Ini adalah kode yang Anda butuhkan:

string strInput = "0001234";
strInput = strInput.TrimStart('0');
Craig Hannon
sumber
7
bermasalah ketika strInput= "0000000";atau serupa
avrahamcool
@ Omjay karena itu akan mengembalikan string kosong daripada satu nol.
avrahamcool
22
@avrahamcool masih akan melakukan apa yang seharusnya. Mengembalikan nol tunggal akan menjadi pengecualian dan harus ditangani oleh pengembang.
user609926
12
strInput.TrimStart('0').PadLeft(1, '0');akan menangani "0000" > "0".
Chris Romp
30

Kode untuk menghindari pengembalian string kosong (ketika input seperti "00000").

string myStr = "00012345";
myStr = myStr.TrimStart('0');
myStr = myStr.Length > 0 ? myStr : "0";
msysmilu
sumber
2
mari kita asumsikan bahwa string sangat panjang, mengapa memotongnya dua kali? Anda dapat menyimpan string yang dipangkas dalam variabel
avrahamcool
@avrahamcool, apa maksudmu, di mana dipangkas dua kali? Terima kasih atas komentarnya.
msysmilu
ah, @avrahamcool, mungkin itu sebabnya saya mengeditnya :) pada akhirnya itu adalah memori pertanyaan vs waktu komputasi; Saya kira hari ini memori tidak lagi menjadi masalah dalam jenis aplikasi ini
msysmilu
25

return numberString.TrimStart('0');

sinar
sumber
5
bermasalah ketika numberString= "0000000";atau serupa
avrahamcool
1
@msysmilu karena itu akan mengembalikan string kosong daripada satu nol.
avrahamcool
1
@avrahamcool Anda benar. Ergo saya menyarankan jawaban untuk menghindari ini
msysmilu
5

TryParse berfungsi jika nomor Anda kurang dari Int32.MaxValue . Ini juga memberi Anda kesempatan untuk menangani string yang berformat buruk. Bekerja sama untuk Int64.MaxValue dan Int64.TryParse .

int number;
if(Int32.TryParse(nvarchar, out number))
{
   // etc...
   number.ToString();
}
JK.
sumber
Mungkin berlebihan untuk pertanyaan yang diajukan, ini adalah solusi yang saya cari karena juga memungkinkan untuk menghilangkan nol-padded yang tepat untuk desimal. (Decimal.TryParse)
dimenangkan
@ JK Saya tahu posnya sudah tua tapi saya sangat suka solusi ini karena bersih dan sangat mudah dimengerti. Hanya satu pertanyaan mengubah teks dalam acara pers utama juga akan memecat acara yang diubah teks - apakah saya benar?
Ken
3

Regex ini memungkinkan Anda menghindari hasil yang salah dengan digit yang hanya menerima dari nol "0000" dan bekerja pada digit dengan panjang berapa pun:

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

Dan regex ini akan menghapus nol terkemuka di mana saja di dalam string:

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

Menggunakan berikut ini akan mengembalikan 0 tunggal ketika input semua 0.

string s = "0000000"
s = int.Parse(s).ToString();
Deependra Mishra
sumber
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");
Bharat
sumber
5
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
Nic3500
Meningkatkan jawaban sesuai saran dari @ Nic3500
Bharat