Ruby字符串整数扫描

Ver*_*gen 4 ruby string parsing

是否有与Java Scanner相当的Ruby?

如果我有一个像"你好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();
Run Code Online (Sandbox Code Playgroud)

你会如何在Ruby中做到这一点?

klo*_*ner 12

用途String.scan:


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

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"
Run Code Online (Sandbox Code Playgroud)


Jon*_*röm 7

从数组中进行多次赋值可能对此有用

a,b,c,d = sc.split
b=b.to_i
d=d.to_i
Run Code Online (Sandbox Code Playgroud)

效率较低的替代方案:

a,b,c,d = sc.split.map{|w| Integer(w) rescue w}
Run Code Online (Sandbox Code Playgroud)