我想在第一次出现给定字符后修剪字符串的末尾,在这种情况下为'。'。如何在第一次出现字符后修整字符串的末尾C#
此字符在字符串中出现多次。
- 输入:143.122.124.123
- 输出:143
我能找到类似这样的多个问题alhtough它们都使用LastIndexOf()
;因为这需要第一次出现并移除字符串的其余部分。
我想在第一次出现给定字符后修剪字符串的末尾,在这种情况下为'。'。如何在第一次出现字符后修整字符串的末尾C#
此字符在字符串中出现多次。
我能找到类似这样的多个问题alhtough它们都使用LastIndexOf()
;因为这需要第一次出现并移除字符串的其余部分。
input.Substring(0, input.IndexOf('.'))
说明:
String.IndexOf(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
new string(input.TakeWhile(ch => ch != '.').ToArray())
input.SubstringUpTo('.')
这将是很好的检查input.IndexOf('。')!= -1只是为了确保输入包含字符。 –
string input = "143.122.124.123";
string output = input.Split('.')[0];
这将返回整个字符串,如果没有找到Split
字符。
'input.Split(new char [] {'。'},2)'是一个更好的选择(对于有很多点的长字符串的情况) –
@DmitryBychenko其实我认为你可以将计数传递为'1'比'2'。 –
@Matthew Watson:对不起,我们想要'2'项目,他们是:'143'和'122.124.123' –
(我发布这只是为了完整性 - 谢尔盖的答案似乎是正确和最简单的。)
(1)一个LINQ方法:
s = new string(s.TakeWhile(c => c != '.').ToArray());
(2)同谢尔盖的回答,但使用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()
方法实际上是一个扩展方法,所以实际上它只是同谢尔盖的回答是:
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;
}
}
你可以给一个'Left'方法文档的链接吗? –
@SergeyBerezovskiy Ooops我不小心使用了扩展方法;我会添加它! –
谢谢,现在很清楚。我以为有一些框架更新,我错过了:) –
而现在我们得到了坚果和坚持使用.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());
使用的IndexOf而不是LastIndexOf呢? :) – john
许多类似的主题:1. http://stackoverflow.com/questions/6578254/to-get-specific-part-of-a-string-in-c-sharp 2. http://stackoverflow.com/ question/10868517/split-string-and-get-first-value-only – swdev95
[在字符串末尾的trim字符串]的可能重复(http://stackoverflow.com/questions/4226657/trim-string-at-字符串末尾) – Fabiano