programing

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

elecom 2023. 7. 27. 21:37
반응형

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

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

예를 들어 다음 숫자에서 선행 0을 모두 제거하려고 합니다.

0001234
0000001234
00001234

필요한 코드는 다음과 같습니다.

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

위의 몇 가지 방법(특히 IntXX를 통해 변환하는 방법)은 다음에 대해 작동하지 않기 때문에 NVARCHAR의 길이에 따라 달라집니다.

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

이와 같은 것은

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

입력이 "00000"과 같은 경우 빈 문자열을 반환하지 않도록 하는 코드입니다.

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

return numberString.TrimStart('0');

다음을 사용하면 입력이 모두 0일 때 단일 0이 반환됩니다.

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

번호Int32보다 작으면 TryParse가 작동합니다.최대 값.이렇게 하면 잘못된 형식의 문자열을 처리할 수도 있습니다.Int64에서도 동일하게 작동합니다.MaxValueInt64.파스를 써보세요.

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

이 정규식을 사용하면 0 "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"
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");

저는 그저 간단하고 좋은 방법이 필요했기 때문에 이것을 만들었습니다.

만약 그것이 마지막 자리에 도달한다면, 그리고 그것이 0이라면, 그것은 남을 것입니다.

또한 매우 긴 문자열 대신 각 루프를 사용할 수도 있습니다.

나는 단지 각각의 오래된 차르를 새로운 차르로 교체할 뿐입니다.


이것은 int를 문자열로 포맷한 후 방금 해결한 문제에 매우 적합합니다.

    /* Like this: */
    int counterMax = 1000;
    int counter = ...;
    string counterString = counter.ToString($"D{counterMax.ToString().Length}");
    counterString = RemoveLeadingChars('0', ' ', counterString);
    string fullCounter = $"({counterString}/{counterMax})";
    // = (   1/1000) ... ( 430/1000) ... (1000/1000)

    static string RemoveLeadingChars(char oldChar, char newChar, char[] chars)
    {
        string result = "";
        bool stop = false;
        for (int i = 0; i < chars.Length; i++)
        {
            if (i == (chars.Length - 1)) stop = true;
            if (!stop && chars[i] == oldChar) chars[i] = newChar;
            else stop = true;
            result += chars[i];
        }
        return result;
    }

    static string RemoveLeadingChars(char oldChar, char newChar, string text)
    {
        return RemoveLeadingChars(oldChar, newChar, text.ToCharArray());
    }

저는 항상 제 기능을 제 도서관에 맞게 만드는 경향이 있기 때문에 선택지가 있습니다.

언급URL : https://stackoverflow.com/questions/7010702/how-to-remove-leading-zeros-using-c-sharp

반응형