810 votes

Comment vérifier si une chaîne contient une sous-chaîne en Ruby ?

J'ai une variable de type chaîne dont le contenu est le suivant :

varMessage =   
            "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"

            "/my/name/is/balaji.so\n"
            "call::myFunction(int const&)\n"
            "void::secondFunction(char const&)\n"
             .
             .
             .
            "this/is/last/line/liobrary.so"

dans la chaîne ci-dessus, je dois trouver une sous-chaîne, à savoir

"hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n"

"/my/name/is/balaji.so\n"
"call::myFunction(int const&)\n"

Comment puis-je le trouver ? J'ai juste besoin de déterminer si la sous-chaîne est présente ou non.

3 votes

0 votes

Voir stackoverflow.com/a/3878656/128421 pour connaître les différentes façons de procéder.

14voto

Mauro Points 1054

Voie ternaire

my_string.include?('ahr') ? (puts 'String includes ahr') : (puts 'String does not include ahr')

OU

puts (my_string.include?('ahr') ? 'String includes ahr' : 'String not includes ahr')

13voto

dawg Points 26051

Vous pouvez utiliser le Référence de l'élément String qui est []

A l'intérieur de la [] peut être soit une sous-chaîne littérale, un index, ou une regex :

> s='abcdefg'
=> "abcdefg"
> s['a']
=> "a"
> s['z']
=> nil

Depuis nil est fonctionnellement identique à false et toute sous-chaîne retournée par [] est true vous pouvez utiliser la logique comme si vous utilisiez la méthode .include? :

0> if s[sub_s]
1>    puts "\"#{s}\" has \"#{sub_s}\""
1> else 
1*    puts "\"#{s}\" does not have \"#{sub_s}\""
1> end
"abcdefg" has "abc"

0> if s[sub_s]
1>    puts "\"#{s}\" has \"#{sub_s}\""
1> else 
1*    puts "\"#{s}\" does not have \"#{sub_s}\""
1> end
"abcdefg" does not have "xyz" 

Veillez simplement à ne pas confondre un index avec une sous-chaîne :

> '123456790'[8]    # integer is eighth element, or '0'
=> "0"              # would test as 'true' in Ruby
> '123456790'['8']  
=> nil              # correct

Vous pouvez également utiliser une regex :

> s[/A/i]
=> "a"
> s[/A/]
=> nil

4voto

Sagar Pandya Points 9060

Comment vérifier si une chaîne contient une sous-chaîne en Ruby ?

Quand vous dites "vérifier", je suppose que vous voulez un retour booléen, dans ce cas vous pouvez utiliser String#match? . match? accepte des chaînes de caractères ou des regex comme premier paramètre, si c'est le premier, il est automatiquement converti en regex. Votre cas d'utilisation serait donc le suivant :

str = 'string'
str.match? 'strings' #=> false
str.match? 'string'  #=> true
str.match? 'strin'   #=> true
str.match? 'trin'    #=> true
str.match? 'tri'     #=> true

String#match? a l'avantage supplémentaire d'un deuxième argument facultatif qui spécifie un index à partir duquel rechercher la chaîne. Par défaut, cet index est fixé à 0 .

str.match? 'tri',0   #=> true
str.match? 'tri',1   #=> true
str.match? 'tri',2   #=> false

2voto

user_input = gets.chomp
user_input.downcase!

if user_input.include?('substring')
  # Do something
end

Cela vous aidera à vérifier si la chaîne de caractères contient une sous-chaîne ou non.

puts "Enter a string"
user_input = gets.chomp  # Ex: Tommy
user_input.downcase!    #  tommy

if user_input.include?('s')
    puts "Found"
else
    puts "Not found"
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X