2012-04-19 63 views
-3

,我有以下形式的字符串:將字符串轉換爲兩個整數?

"(number) number" 

因此,例如,它可能包含:

5 (5) 

5 (3) 

我希望創建一個int變量將舉行第一個值(在這兩種情況下都是5)以及第二個將保存括號內的值的變量(第一種情況下爲5,第二種情況下爲3)。

對我來說,解析這個字符串並將信息保存在變量中的最佳方式是什麼?

+7

正則表達式。 – Neil 2012-04-19 14:05:27

+4

您的意思是「數字(數字)」? – 2012-04-19 14:05:59

+2

這兩個示例與您呈現的模式不同(括號中的值在右邊) – GolfWolf 2012-04-19 14:06:34

回答

0
my $str = "(5) 3"; 
my ($x, $y) = $str =~ /\d+/g; 
print "$x\t$y\n"; 

測試環節:http://ideone.com/PzidT


如果您不確定輸入是否有兩個數字,然後更安全的代碼是:

my $str = "(5) 3 4 (8)"; 
my ($x, $y) = ($str =~ /\d+/g)[0..1]; 
print "$x\t$y\n"; 

測試鏈路:http://ideone.com/dBIjh

0

的有趣的方式;-)

var s = "5 (3)"; 
var space = s.IndexOf(' '); 
var openParen = s.IndexOf('(')+1; 
var closeParen = s.IndexOf(')'); 
int firstNumber = int.Parse(s.Substring(0, space)); 
int secondNumber = int.Parse(s.Substring(openParen, closeParen-openParen)); 

或者正則表達式的方法:

var s = "5 (3)"; 
var match = Regex.Match(s, @"(\d+(\((\d+)\)"); 
int firstNumber = int.Parse(match.Groups[1].Value); 
int secondNumber = int.Parse(match.Groups[2].Value); 
+0

除非輸入字符串的格式中存在更多不確定性,否則正則表達式似乎有點矯枉過正。 – mgnoonan 2012-04-19 14:17:10

0

使用正則表達式:

string input = "5 (3)"; 
string pattern = @"(\d+) \((\d+)\)"; 
var match = Regex.Match(input, pattern); 
if (match.Success) 
{ 
    int x = int.Parse(match.Groups[1].Value); 
    int y = int.Parse(match.Groups[2].Value); 
    ... 
} 
else 
{ 
    // Fail 
    ... 
} 
0

這是我的頭頂,所以它可能需要一些更正。您可以將所有不需要的字符拆分爲字符串,並刪除任何空值。

string[] values = stringValues.Split(new char[] {' ','(',')'}, StringSplitOptions.RemoveEmptyEntries); 
foreach (string stringValue in values) 
{ 
    int intValue = Convert.ToInt32(stringValue); 
    // etc. 
} 
0

使用一些正則表達式! \d指定數值和()指定返回的值..

var regex = new Regex("(\d+) \((\d+)\)"); 
var match = regex.Match(yourStringVariable); 

所以對於yourStringVariable = "5 (3)",輸出將是:

Console.WriteLine(match.Groups[1].Value); // Prints 5 
Console.WriteLine(match.Groups[2].Value); // Prints 3