2012-01-18 75 views
0

我有一个字符串列表。他们看起来像: this.is.the.first.one that.is.the.second thishasnopoint 其中一些有点,但其中一些没有点。我只需要在可能的第一个点之前使用c#从第一个字母中截断字符串。截断的字符串应如下所示: this that thishasnopoint 谷歌搜索没有显示任何有用的线索。从第一个字母之前的第一个字母开始截断字符串?

回答

7

简单的方法是这样的:

string firstBit = wholeString.Split('.')[0]; 

Split它变成一个字符串数组,在'.'字符分隔。在thishasnopoint的情况下,该数组只有一个元素。

+1

光滑...,并且对于那些没有周期的字符串,总是会将整行返回到数组的零位... Cool ... – DRapp 2012-01-18 11:41:16

+0

谢谢!有用! – user1154138 2012-01-18 11:44:19

1

现在,我的理解是正确的,该字符串是唯一的一个这些序列......所以这将做到这一点:

var result = strings.Split('.').First(); 

如果字符串是:this.is.the.first.one that.is.the.second thishasnopoint - 一个字符串这样的:

var firstWords = new List<string>(); 
strings.Split(' ').ForEach(x => firstWords.Add(x.Split('.').First())); 

将返回:

List<string>用三根琴弦 - this that thishasnopoint

1
string getTruncated(string s) { 
    int startIdx = -1; 
    for (int i = 0; i < s.Length; ++i) { 
     if (Char.IsLetter(s[i])) { 
      startIdx = i; 
      break; 
     } 
    } 
    int endIdx = s.IndexOf('.'); 
    if (startIdx != -1) { 
     if (endIdx != -1) { 
      return s.Substring(startIdx, endIdx); 
     } else { 
      return s.Substring(startIdx); 
     } 
    } else { 
     throw new ArgumentException(); 
    } 
} 

工作更快,而不是“分裂”的方法,但它更复杂。

+0

split如何在内部实现?是什么让这个更快? – Hammerstein 2012-01-18 12:06:04

+0

呃...为什么假设这是性能敏感?你的代码比使用分割的版本要维护得少得多。另外,如果你得到一个字符串像111.234,OP不排除,你的代码会导致一个ArgumentException。 – 2012-01-18 12:24:40

+0

Hammerstein,split方法创建字符串数组,例如输入==“this.is.first.phrase”split('。')将返回String [] {“this”,“is”,“first”, “短语”}数组,其中只有zero'st元素正在使用,但其他将成为GC。 David M,作为post的创建者说,结果必须是第一个字母和第一个点之间的子串。然后,如果输入只是数字,则引发异常。 – nazlo 2012-01-20 17:38:18

相关问题