删除除最后一个字符串中的字符

时间:2012-12-12 16:14:04

标签: c# string linq optimization

我要删除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,情况完全不同)

6 个答案:

答案 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());
}

Demo

答案 2 :(得分:1)

我会这样做:

  1. 搜索最后一个'。' ;
  2. substring [0 .. indexOfLastDot];
  3. 删除任何'。'子串
  4. 将子字符串与原始字符串的其余部分连接起来,[indexOfLastDot .. remaining]
  5. OR

    1. 搜索最后一个'。'
    2. 表示字符串
    3. 的每个枚举字符
    4. 如果它是'。'并且我≠indexOfLastDot,将其删除

答案 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);