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的,事情完全不同)

我会这样做:

  • 搜索最后一个“.”
  • 子字符串[0..indexOfLastDot]
  • 就地删除子字符串的任何“.”
  • 将子字符串与原始字符串的其余部分连接起来,[indexOfLastDot..remaining]
  • 搜索最后一个“.”
  • 对于字符串的每个枚举字符
  • 如果它是一个“.”而我≠ indexOfLastDot,将其移除

  • 我会那样做的。最整洁的方法并不总是最短的方法。

    也许是
    字符串方法和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);