第一次出现char C后如何修剪字符串的结尾#

Mic*_*ael -5 c#

我想在给定角色第一次出现之后修剪一个字符串的结尾,在这种情况下是'.'

此字符在字符串中多次出现.

  • 输入:143.122.124.123
  • 产量:143

我可以找到与他们都使用的类似的多个问题LastIndexOf(); 这需要第一次出现并删除其余的字符串.

Ser*_*kiy 5

input.Substring(0, input.IndexOf('.'))
Run Code Online (Sandbox Code Playgroud)

说明:

  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);
Run Code Online (Sandbox Code Playgroud)

实际上,有很多选择可以做你想要的:

  1. 快速 input.Substring(0, input.IndexOf('.'))
  2. 简约 input.Split('.')[0]
  3. 对于正则表达的爱好者 Regex.Match(input, @"[^\.]*").Value
  4. 对于LINQ疯子 new string(input.TakeWhile(ch => ch != '.').ToArray())
  5. 清洁代码爱好者的扩展方法. input.SubstringUpTo('.')