2016-05-28 197 views
-2

下面是一个字符串的下一个字符,查找字符串

test = "IXIVDL" 

如何找到其中的字符“I”中的字符串之后来到? 而不管它只是“X”还是“V”或其他?

例如,

"IDXCN"是无效的字符串,因为"I" ID后跟"D"

"IXD"是一个有效的字符串,因为"I"其次是"X"

"IVIX"是一个有效的字符串,因为"I"之后"V""X"

"DIDIX"是无效的字符串,因为"I"后面跟着"D"

"DXI"有效

我不希望任何字符串输出。结果应该是真或假或零。

+0

您似乎一直在急于选择一个答案。 –

回答

0

检查有正则表达式在这里工作:Class: Regexp

这应该解决您的疑问,请注意,当它存在有效字符串的索引返回:

'IXIVDL' =~ /I[XV]/ # returns 0 
'IDXCN' =~ /I[XV]/ # returns nil 
'IXD' =~ /I[XV]/ # returns 0 
'IVIX' =~ /I[XV]/ # returns 2 

如果您需要了解是否I紧接着是XV您可以改为使用:

'DID­IX' =~ /I[^X­V]/ 

它返回nil有效的字符串(注意它在字符串的末尾接受I)。

+0

这是不正确的,因为'DIDIX'=〜/ I [XV] /#返回3,这是无效的。 “I”后面只能跟“X”或“V” –

+0

所以即使'I'后面紧跟着'X',你就需要它失败,因为在字符串的其他部分'I'是立即的接着是'D'?如果是这种情况,请检查我的更新答案。 – MondKin

+0

字符串末尾的“I”没问题。感谢您的回复。 –

1
def validate(str)  
    res = str.scan(/(?<=I).?/) 
    puts "String is #{(res-['X','V']).empty? ? "valid" : "invalid"}" 
    res.each do |c| 
    if c.empty? 
     puts "I at end of string is invalid" 
    else 
     puts "#{c} following I is #{c=~/[XV]/ ? "valid" : "invalid"}" 
    end 
    end 
end 

validate "IXIVDLIZRI" 
String is invalid 
X following I is valid 
V following I is valid 
Z following I is invalid 
I at end of string is invalid 

validate "IXIVDLIV" 
String is valid 
X following I is valid 
V following I is valid 
V following I is valid 

/(?<=I)./匹配“I”后面的任何字符。 (?<=I)是一个积极的lookbehind。更改puts消息以适合。

1

这是一种可以运行以测试您的字符串的方法,如果没有II后面跟着您指定的正确字母,它将输出Invalid String。否则,它会输出Valid String, I is followed by...,无论您选择哪个字母。在这种情况下XV

def find_I(test) 
    index_of_I = test.split('').find_index { |letter| letter == 'I' } 
    if index_of_I.nil? || test[index_of_I + 1].nil? 
    return "Invalid String" 
    elsif test[index_of_I + 1] =~ /[XV]/ 
    return "Valid String, I followed by #{test[index_of_I + 1]}" 
    else 
    return "Invalid String" 
    end 
end 
0

这是最简单的解决方案。

def find_string_digits(str) 
    str =~ /IX/ || str =~ /IV/ ? true : false 
end 

它使用正则表达式来匹配字符串内的特定图案,在这种情况下是否一个“X”直接跟随一个“i”,或者如果一个“V”直接跟随一个“I”,并且如果是这样返回true,否则返回false。在附注中,如果你想检查'I'是'X'后的第三个字母,你可以匹配/I..X/等等。

希望有所帮助。