Существует ли 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?
Использование String.scan:
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" => # < 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"
Для этого может быть полезно несколько присваиваний из массивов
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}