在第一次出现char c#之后,如何修剪字符串的末端



我想在第一次出现给定字符后修剪字符串的末端,在这种情况下,'

这个字符在字符串中多次出现。

  • 输入:143.122.124.123
  • 输出:143

我可以找到与此相似的多个问题,它们都使用LastIndexOf();在需要第一次发生的情况下,并删除字符串的其余部分。

input.Substring(0, input.IndexOf('.'))

说明:

  1. 使用String.IndexOf(char)在字符串中获取第一次char的基于零的索引。例如。对于您的输入,它将是索引3的第四个字符。
  2. 使用String.Substring(startIndex,length)从字符串的开头获取子字符串。使用char的索引作为子字符串的长度,因为索引基于零。

注意:

此解决方案的优点(与使用Split相比(是,它不会在内存中创建数组,也不会遍历所有搜索拆分字符和提取子字符串的字符串。

该解决方案的

缺点是字符串必须包含您要寻找的至少一个字符(感谢Ivan Chepikov提及它(。安全的替代方案看起来像

int index = input.IndexOf('.');
if (index != -1)
    substring = input.Substring(0, index);

实际上,有很多选择要做您想做的事情:

  1. 快速input.Substring(0, input.IndexOf('.'))
  2. 简约input.Split('.')[0]
  3. 对于正则恋人Regex.Match(input, @"[^.]*").Value
  4. 对于Linq Maniacs new string(input.TakeWhile(ch => ch != '.').ToArray())
  5. 清洁代码爱好者的扩展方法。input.SubstringUpTo('.')
string input = "143.122.124.123";
string output = input.Split('.')[0];

如果找不到Split字符,这将返回整个字符串。

(我只是为了完整而发布此信息-Sergey的答案似乎是正确且最简单的。(

(1(linq方法:

s = new string(s.TakeWhile(c => c != '.').ToArray());

(2(与Sergey的答案相同,但使用Left()字符串扩展:

string s = "143.122.124.123";
s = s.Left(s.IndexOf('.'));

确实应该检查错误:

string s = "143.122.124.123";
int n = s.IndexOf('.');
if (n >= 0)
    s = s.Left(n);

注意:Left()方法实际上是一种扩展方法,因此实际上与Sergey的答案相同:

public static class StringExt
{
    public static string Left(this string self, int count)
    {
        string result = self.Length <= count 
            ? self 
            : self.Substring(0, count);
        return result;
    }
}

,现在我们有坚果, sustist 使用.LastIndexOf()

string input = "143.122.124.123";
string rev = new string(input.Reverse().ToArray());
string output = new string(rev.Substring(rev.LastIndexOf('.') + 1).Reverse().ToArray());

最新更新