我想在第一次出现给定字符后修剪字符串的末端,在这种情况下,'
这个字符在字符串中多次出现。
- 输入:143.122.124.123
- 输出:143
我可以找到与此相似的多个问题,它们都使用LastIndexOf()
;在需要第一次发生的情况下,并删除字符串的其余部分。
input.Substring(0, input.IndexOf('.'))
说明:
- 使用
String.IndexOf(char)
在字符串中获取第一次char的基于零的索引。例如。对于您的输入,它将是索引3
的第四个字符。 - 使用
String.Substring(startIndex,length)
从字符串的开头获取子字符串。使用char的索引作为子字符串的长度,因为索引基于零。
注意:
此解决方案的优点(与使用Split
相比(是,它不会在内存中创建数组,也不会遍历所有搜索拆分字符和提取子字符串的字符串。
缺点是字符串必须包含您要寻找的至少一个字符(感谢Ivan Chepikov提及它(。安全的替代方案看起来像
int index = input.IndexOf('.');
if (index != -1)
substring = input.Substring(0, index);
实际上,有很多选择要做您想做的事情:
- 快速
input.Substring(0, input.IndexOf('.'))
- 简约
input.Split('.')[0]
- 对于正则恋人
Regex.Match(input, @"[^.]*").Value
- 对于Linq Maniacs
new string(input.TakeWhile(ch => ch != '.').ToArray())
- 清洁代码爱好者的扩展方法。
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());