繁体   English   中英

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

[英]remove chars in string except last

我想删除这个字符''。 从最后一次出现以外的字符串; 例如字符串

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

int lastIndex = value.LastIndexOf('.');
if (lastIndex > 0)
{
    value = value.Substring(0, lastIndex).Replace(".", "")
        + value.Substring(lastIndex);
}

也许是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());
}

演示

我会这样做:

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

要么

  1. 搜索最后一个'。'
  2. 对于字符串的每个枚举字符
  3. 如果它是'。' 并且我≠indexOfLastDot,删除它
  var splitResult = v.Split(new char[] { '.' }).ToList();
  var lastSplit = splitResult.Last();
  splitResult.RemoveAt(splitResult.Count - 1);
  var output = string.Join("", splitResult) + "." + lastSplit;

我会这样做的。 最好的方式并不总是最短的方式。

这样的事情应该可以解决问题。 它是否“好”是另一回事。 另请注意,没有错误检查。 可能要检查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 ;-)

你不必使用循环:

    //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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM