C# 删除字符串中除最后一个字符以外的字符
我尝试从字符串中删除字符“.”,但最后一次出现的字符除外;例如字符串C# 删除字符串中除最后一个字符以外的字符,c#,string,linq,optimization,C#,String,Linq,Optimization,我尝试从字符串中删除字符“.”,但最后一次出现的字符除外;例如字符串 12.34.56.78 应该成为 123456.78 我正在使用这个循环: while (value != null && value.Count(c => c == '.') > 1) { value = value.Substring(0, value.IndexOf('.')) + value.Substring(value.IndexOf('.') + 1); } 我想知道是
12.34.56.78
应该成为
123456.78
我正在使用这个循环:
while (value != null && value.Count(c => c == '.') > 1)
{
value = value.Substring(0, value.IndexOf('.')) + value.Substring(value.IndexOf('.') + 1);
}
我想知道是否有一种更干净的方法(可能使用linq?)在没有显式循环的情况下实现这一点
(我知道有一个非常类似的问题,但是是关于perl的,事情完全不同)我会这样做:
我会那样做的。最整洁的方法并不总是最短的方法。也许是
字符串方法和Linq的混合体:
int lastIndex = value.LastIndexOf('.');
if (lastIndex > 0)
{
value = value.Substring(0, lastIndex).Replace(".", "")
+ value.Substring(lastIndex);
}
string str = "12.34.56.78";
Char replaceChar = '.';
int lastIndex = str.LastIndexOf(replaceChar);
if (lastIndex != -1)
{
IEnumerable<Char> chars = str
.Where((c, i) => c != replaceChar || i == lastIndex);
str = new string(chars.ToArray());
}
string str=“12.34.56.78”;
Char replaceChar=';
int lastIndex=str.LastIndexOf(replaceChar);
如果(lastIndex!=-1)
{
IEnumerable chars=str
其中((c,i)=>c!=replaceChar | | i==lastIndex);
str=新字符串(chars.ToArray());
}
像这样的东西应该可以奏效。是否“好”是另一回事。还要注意,没有错误检查。可能需要检查空字符串或空字符串,并且该字符串中至少有一个“
”
string numbers = "12.34.56.78";
var parts = String.Split(new char [] {'.'});
string newNumbers = String.Join("",parts.Take(parts.Length-1)
.Concat(".")
.Concat(parts.Last());
我并不认为这对长字符串有很好的性能特性,但它确实使用了Linq;-) 您不必使用循环:
//string val = "12345678";
string val = "12.34.56.78";
string ret = val;
int index = val.LastIndexOf(".");
if (index >= 0)
{
ret = val.Substring(0, index).Replace(".", "") + val.Substring(index);
}
Debug.WriteLine(ret);
我最好是提供代码示例(至少是伪代码),而不是解释您将要做什么。我理解,第一个解决方案比我的解决方案更简洁,出于某种原因,我将其过度复杂化了+1这与@skp answer相同,没有auto
?只是好奇好!我总是喜欢使用Select/Where重载将索引投影到序列中(在适当的情况下)。我更喜欢skp解决方案,因为它还可以用于字符串替换(不仅是char),而且+1也可以用于nice解决方案,这与@skp answer相同
//string val = "12345678";
string val = "12.34.56.78";
string ret = val;
int index = val.LastIndexOf(".");
if (index >= 0)
{
ret = val.Substring(0, index).Replace(".", "") + val.Substring(index);
}
Debug.WriteLine(ret);