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에서도 동일하게 작동합니다.MaxValue 및 Int64.파스를 써보세요.
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