C #을 사용하여 선행 0을 제거하는 방법


134

C #을 사용하여 문자열에서 선행 0을 제거하는 방법은 무엇입니까?

예를 들어 다음 숫자에서 모든 선행 0을 제거하고 싶습니다.

0001234
0000001234
00001234

3
'nvarchar datatype'으로 문자열을 의미한다고 가정합니다.
Ray

그리고 'C £'는 'C #'을 의미합니다 ...
T30

답변:


151

NVARCHAR의 길이에 따라 달라집니다. 위의 (특히 IntXX를 통해 변환하는) 메소드 중 일부는 다음과 같이 작동하지 않습니다.

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

이 같은 것

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

17
언제 strInput= "0000000";또는 유사한 문제 . 0이 아닌 빈 문자열을 반환하기 때문입니다.
avrahamcool

2
@avrahamcool 문자열의 길이를보고 "0"다듬기 후 비어 있으면 간단히 반환하여 처리 할 수 ​​있습니다 . 또는을 사용 PadLeft(1, '0')합니다.
Cœur

310

이것은 필요한 코드입니다.

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

7
문제가 strInput= "0000000";있거나 비슷한 경우
avrahamcool

@Emjay는 0이 아닌 빈 문자열을 반환하기 때문입니다.
avrahamcool

22
@avrahamcool 그것은 여전히 ​​정확히해야 할 일을하고있을 것입니다. 단일 0을 반환하는 것은 예외이며 개발자가 처리해야합니다.
user609926

12
strInput.TrimStart('0').PadLeft(1, '0');처리 "0000" > "0"합니다.
Chris Romp

30

빈 문자열을 반환하지 않는 코드 (입력이 "00000"과 같은 경우)

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

2
줄이 매우 길다고 가정 해 봅시다. 왜 두 번 자르겠습니까?
잘라낸

@avrahamcool, 어디 두 번 트리밍됩니까? 의견 주셔서 감사합니다.
msysmilu

아, @avrahamcool, 어쩌면 내가 편집 한 이유 일 것입니다 :) 결국 메모리와 계산 시간에 대한 질문입니다. 오늘 메모리는 더 이상 이런 종류의 응용 프로그램에서 문제가되지 않는 것
같습니다

25

return numberString.TrimStart('0');


5
문제가 numberString= "0000000";있거나 비슷한 경우
avrahamcool

1
@msysmilu는 0이 아닌 빈 문자열을 반환하기 때문입니다.
avrahamcool

1
@avrahamcool 당신이 맞아요. Ergo 나는 이것을 피하기위한 답을 제안했다
msysmilu

5

TryParse 는 숫자가 Int32.MaxValue 미만인 경우 작동 합니다 . 또한 형식이 잘못된 문자열을 처리 할 수 ​​있습니다. Int64.MaxValueInt64.TryParse에 대해 동일하게 작동합니다 .

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

아마도 제기 된 질문에 대해 과잉으로, 이것은 소수점을 오른쪽으로 채워진 0을 제거 할 수 있기 때문에 내가 찾고있는 솔루션입니다. (Decimal.TryParse)
15:57에

@ JK 게시물이 오래되었다는 것을 알고 있지만 깨끗하고 이해하기 쉬운이 솔루션을 정말 좋아합니다. 키 누르기 이벤트에서 텍스트를 변경하는 한 가지 질문만으로도 텍스트 변경 이벤트가 발생합니다.
Ken

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

그리고이 정규식은 문자열 내부의 모든 위치에서 선행 0을 제거합니다.

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

2

다음을 사용하면 입력이 모두 0 일 때 단일 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
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
Nic3500

@ Nic3500의 제안에 따라 답변을 개선했습니다
Bharat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.