Ruby String Целочисленное сканирование - PullRequest
4 голосов
/ 19 января 2010

Существует ли Ruby-эквивалент Java-сканера?

Если у меня есть строка типа "привет 123 привет 234"

В Java я мог бы сделать

Scanner sc = new Scanner("hello 123 hi 234");
String a = sc.nextString();
int b = sc.nextInt();
String c = sc.nextString();
int d = sc.nextInt();

Как бы вы сделали это в Ruby?

Ответы [ 2 ]

12 голосов
/ 19 января 2010

Использование String.scan:


>> s = "hello 123 hi 234"
=> "hello 123 hi 234"
>> s.scan(/\d+/).map{|i| i.to_i}
=> [123, 234]

RDoc здесь

Если вы хотите что-то ближе к реализации Java, вы можете использовать StringScanner :


>> require 'strscan'
 => true
>> s = StringScanner.new "hello 123 hi 234"
=> # &lt StringScanner 0/16 @ "hello...">
>> s.scan(/\w+/)
=> "hello"
>> s.scan(/\s+/)
=> " "
>> s.scan(/\d+/)
=> "123"
>> s.scan_until(/\w+/)
=> " hi"
>> s.scan_until(/\d+/)
=> " 234"
7 голосов
/ 19 января 2010

Для этого может быть полезно несколько присваиваний из массивов

a,b,c,d = sc.split
b=b.to_i
d=d.to_i

Менее эффективная альтернатива:

a,b,c,d = sc.split.map{|w| Integer(w) rescue w}
...