2012-04-19 19 views
-3

私は次の形式の文字列を持っている:文字列を2つのintに変換しますか?

"(number) number" 

だから、例えば、それは含まれていてもよい:

5 (5) 

または

5 (3) 

を私は保持するint型の変数を作成したいです最初の値(どちらの場合も5)、および大括弧内の値を保持する2番目のint変数(最初のケースでは5、2番目では3)。

私はこの文字列を解析して、情報を変数に保存するのに最適な方法は何ですか?

+7

正規表現。 – Neil

+4

「番号(数字)」を意味しましたか? –

+2

2つの例は、あなたが提示したパターンとは異なります(括弧内の値は右側にあります) – GolfWolf

答えて

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

テストリンク:http://ideone.com/PzidT


あなたの場合入力にちょうど2つの数字があることが確かではなく、その後、より安全なコードは次のとおりです。

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)); 

または正規表現の方法:第三の選択肢については

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

入力文字列のフォーマットに不確実性がある場合を除き、Regexは少し過剰なようです。 – mgnoonan

0

テイク正規表現を使用して

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

これは私の頭の上から外れているので、修正が必要な場合があります。文字列を必要のないすべての文字に分割し、空の値を削除することができます。

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

RegEx! \dは数値を指定し、()指定し、値を返さ.. yourStringVariable = "5 (3)"ためので

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

、出力は次のようになります。

Console.WriteLine(match.Groups[1].Value); // Prints 5 
Console.WriteLine(match.Groups[2].Value); // Prints 3 
関連する問題