2010-01-11 101 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+"));

相关问题