2017-04-21 84 views
-6

我想在第一次出现给定字符后修剪字符串的末尾,在这种情况下为'。'。如何在第一次出现字符后修整字符串的末尾C#

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

  • 输入:143.122.124.123
  • 输出:143

我能找到类似这样的多个问题alhtough它们都使用LastIndexOf();因为这需要第一次出现并移除字符串的其余部分。

+7

使用的IndexOf而不是LastIndexOf呢? :) – john

+4

许多类似的主题: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

+1

[在字符串末尾的trim字符串]的可能重复(http://stackoverflow.com/questions/4226657/trim-string-at-字符串末尾) – Fabiano

回答

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

说明:

  1. 使用String.IndexOf(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. For LINQ maniacs new string(input.TakeWhile(ch => ch != '.').ToArray())
  5. 干净的代码爱好者的扩展方法。 input.SubstringUpTo('.')
+1

这将是很好的检查input.IndexOf('。')!= -1只是为了确保输入包含字符。 –

2
string input = "143.122.124.123"; 
string output = input.Split('.')[0]; 

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

+2

'input.Split(new char [] {'。'},2)'是一个更好的选择(对于有很多点的长字符串的情况) –

+0

@DmitryBychenko其实我认为你可以将计数传递为'1'比'2'。 –

+0

@Matthew Watson:对不起,我们想要'2'项目,他们是:'143'和'122.124.123' –

1

(我发布这只是为了完整性 - 谢尔盖的答案似乎是正确和最简单的。)

(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; 
    } 
} 
+1

你可以给一个'Left'方法文档的链接吗? –

+0

@SergeyBerezovskiy Ooops我不小心使用了扩展方法;我会添加它! –

+0

谢谢,现在很清楚。我以为有一些框架更新,我错过了:) –

0

而现在我们得到了坚果和坚持使用.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()); 
相关问题