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

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"

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

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

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


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

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"

2

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

string s = "0000000"
s = int.Parse(s).ToString();

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
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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.