例如,如果有字符串“000001234090883450”。如何删除第一个“0”通常我会使用substring然后使用string.Remove删除前五个“0”。但它会切断字符串中的所有“0”。是否有可能只删除前五个“0”,保留其余的字符串完整?
编辑:如果我不够具体,我道歉。我想说的是该字符串中“0”的数量不是常数。 “0”是用户输入,因此下次可能是:“000123325435043540035”答案 0 :(得分:6)
您有很多选择 - 如果您想要修剪所有前导零字符,一个简单的选项是:
var result = "000001234090883450".TrimStart('0');
通常我会使用substring然后删除前五个
正如您提到的Substring
,您还可以使用Substring
删除前5个字符(如果您只想删除5个字符)。如果您已使用Remove
Substring
var result = "000001234090883450".Substring(5);
答案 1 :(得分:0)
另一种解释:您希望从字符串"00000"
的每次出现中删除前导"000001234090883450"
。这可以使用regex lookahead来完成:
string s = Regex.Replace("...000001234090883450...", "00000(?=1234090883450)", "");
// Result: "...1234090883450..."
答案 2 :(得分:0)
如果字符串的格式是可预测的,您可以使用转换:
var s = "000001234090883450";
s = long.Parse(s).ToString(); // convert string to long and then back to string
答案 3 :(得分:0)
@Ajay_C:如果您的问题实际上与您在评论中所说的那样:
我需要if语句,因为我需要在数字前添加“1” 如果字符串的开头没有任何“0”。
然后你想要这样的东西:
class Program
{
static string TransformUserInput( string s )
{
if ( s == null ) throw new ArgumentNullException("s") ;
string transformed = "" ;
if ( s.Length > 0 )
{
transformed = rxLeadingZeros.Replace(s, m => m.Length == 0 ? "1" : m.Length == s.Length ? "0" : "" ) ;
}
return transformed ;
}
private static readonly Regex rxLeadingZeros = new Regex( @"^0*");
static void Main( string[] args )
{
string [] values = { "" , "0" , "000" , "000000987654321000" , "54321000" , "0000000000000000000000000000000" , "000000000000000000009876543210" , } ;
foreach ( string raw in values )
{
string cooked = TransformUserInput(raw) ;
Console.WriteLine( "raw : {0}",raw) ;
Console.WriteLine( "cooked : {0}",cooked);
Console.WriteLine() ;
}
return;
}
}
执行以下操作:
0
个字符(可能没有)1
将添加到字符串中,0
String.Empty
替换前导零。这是输出:
raw :
cooked :
raw : 0
cooked : 0
raw : 000
cooked : 0
raw : 000000987654321000
cooked : 987654321000
raw : 54321000
cooked : 154321000
raw : 0000000000000000000000000000000
cooked : 0
raw : 000000000000000000009876543210
cooked : 9876543210