,我有以下形式的字符串:將字符串轉換爲兩個整數?
"(number) number"
因此,例如,它可能包含:
5 (5)
或
5 (3)
我希望創建一個int變量將舉行第一個值(在這兩種情況下都是5)以及第二個將保存括號內的值的變量(第一種情況下爲5,第二種情況下爲3)。
對我來說,解析這個字符串並將信息保存在變量中的最佳方式是什麼?
,我有以下形式的字符串:將字符串轉換爲兩個整數?
"(number) number"
因此,例如,它可能包含:
5 (5)
或
5 (3)
我希望創建一個int變量將舉行第一個值(在這兩種情況下都是5)以及第二個將保存括號內的值的變量(第一種情況下爲5,第二種情況下爲3)。
對我來說,解析這個字符串並將信息保存在變量中的最佳方式是什麼?
my $str = "(5) 3";
my ($x, $y) = $str =~ /\d+/g;
print "$x\t$y\n";
如果您不確定輸入是否有兩個數字,然後更安全的代碼是:
my $str = "(5) 3 4 (8)";
my ($x, $y) = ($str =~ /\d+/g)[0..1];
print "$x\t$y\n";
的有趣的方式;-)
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);
除非輸入字符串的格式中存在更多不確定性,否則正則表達式似乎有點矯枉過正。 – mgnoonan 2012-04-19 14:17:10
使用正則表達式:
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
...
}
對於第三個選項:
這是我的頭頂,所以它可能需要一些更正。您可以將所有不需要的字符拆分爲字符串,並刪除任何空值。
string[] values = stringValues.Split(new char[] {' ','(',')'}, StringSplitOptions.RemoveEmptyEntries);
foreach (string stringValue in values)
{
int intValue = Convert.ToInt32(stringValue);
// etc.
}
使用一些正則表達式! \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
正則表達式。 – Neil 2012-04-19 14:05:27
您的意思是「數字(數字)」? – 2012-04-19 14:05:59
這兩個示例與您呈現的模式不同(括號中的值在右邊) – GolfWolf 2012-04-19 14:06:34