2010-01-11 56 views
1

我有一個這樣的格式的字符串:「ABC_123_」從這個字符串中分離int的最有效方法是什麼?

我想結束與整數變量,只是字符串的數字部分。什麼是最有效的方式來完成在C#中?

+0

你能告訴我們關於字符串格式? – 2010-01-11 20:57:38

+0

你有什麼理由擔心效率?你發佈的字符串只有幾個字符,所以我認爲不需要提高效率:任何方式都可以。除非你沒有告訴我們你的問題的重要部分。你從事80年代的電腦嗎?現實中的字符串是幾十萬字符長嗎? – 2010-01-11 20:59:23

+0

Efficent可能不是最好的單詞使用。我想要最短的代碼,不一定是最好的性能。我使用3條線來做到這一點,這是在美學上給我帶來麻煩。 – 2010-01-11 21:06:19

回答

8

這應該是有效的。不出汗,如果除非分析告訴你,這是你的應用的瓶頸,這不是最有效的:

string s = "ABC_123_"; 
int i = Int32.Parse(s.Split('_')[1]); 

沒有關於您的問題的詳細信息,這是我會一起去。

-1

如果你的字符串輸入始終處於ABC_123_的形式相同,那麼這將工作

int i = Int32.Parse("ABC_123_".Substring(4, 3)); 
+0

我希望你在面試時永遠不要給這個答案。 – 2010-01-11 21:16:11

+0

@bnaffas:你能否提供一些額外的反饋? – clichekiller 2010-01-12 17:54:42

0

如果字符串等的lenght是固定的,你可以使用String.Substring。

你的字符串越複雜,你應該使用正則表達式越多。

1

以下是一種方法。我不知道「最有效」,但它應該工作:

int? GetJustIntPart(string original) 
{ 
    var split = original.Split('_'); 
    int test; 
    foreach (var item in split) 
    { 
     if (int.TryParse(item, out test)) 
      return test; 
    } 
    return null; 
} 
+0

無論數字部分在哪裏,它都可以工作,而不是指望它處於某個位置。它只會返回* first *數字部分,但是,如果您有多個部分。 – 2010-01-11 21:02:15

3

強制性正則表達式的例子,以匹配所有數字的字符串:

int num = Convert.ToInt32(Regex.Match("ABC_123_", @"\d+").Value); 

更改,以確保它是由環繞_:

int num = Convert.ToInt32(Regex.Match("ABC_123_", @"(?<=_)\d+(?=_)").Value); 

注:值可能爲空/空,如果你輸入的字符串是不正確的格式,所以用int.TryParse或try/catch語句等

+1

僅僅使用'Regex.Match(「ABC_123_」,@「_(\ d +)_」)好得多,而不是在這種情況下環視imo。 – 2010-01-11 21:15:27

+0

的確,儘管我不知道有多少不同的性能,特別是在使用編譯正則表達式時。 – 2010-01-11 22:37:54

2

我會去int i = int.Parse(Regex.Match(string,@"\d+"));

相關問題