我要删除char'。'从最后一次出现以外的字符串;例如字符串
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,情况完全不同)
答案 0 :(得分:4)
int lastIndex = value.LastIndexOf('.');
if (lastIndex > 0)
{
value = value.Substring(0, lastIndex).Replace(".", "")
+ value.Substring(lastIndex);
}
答案 1 :(得分:3)
可能是string
方法和Linq的混合:
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());
}
答案 2 :(得分:1)
我会这样做:
OR
答案 3 :(得分:1)
var splitResult = v.Split(new char[] { '.' }).ToList();
var lastSplit = splitResult.Last();
splitResult.RemoveAt(splitResult.Count - 1);
var output = string.Join("", splitResult) + "." + lastSplit;
我会这样做。最好的方式并不总是最短的方式。
答案 4 :(得分:1)
这样的事情应该可以解决问题。它是否“好”是另一回事。另请注意,没有错误检查。可能要检查null或空字符串,并且该字符串中至少有一个"."
。
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; - )
答案 5 :(得分:0)
你不必使用循环:
//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);