872 Stimmen

Wie prüft man in Ruby, ob eine Zeichenkette eine Teilzeichenkette enthält?

Ich habe eine String-Variable mit Inhalt:

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"

In der Zeichenkette muss ich eine Teilzeichenkette finden:

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

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

Wie kann ich sie finden? Ich muss feststellen, ob der Teilstring vorhanden ist oder nicht.

14voto

Mauro Punkte 1151

Ternärer Weg

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

OR

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

14voto

dawg Punkte 89931

Sie können die String-Element-Referenz Methode, die []

Im Inneren der [] kann entweder eine wörtliche Teilzeichenkette, ein Index oder ein Regex sein:

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

Seit nil ist funktionell dasselbe wie false und jede Teilzeichenkette, die von [] es true können Sie die Logik verwenden, als ob Sie die Methode .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" 

Achten Sie nur darauf, dass Sie einen Index nicht mit einer Teilzeichenkette verwechseln:

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

Sie können auch eine Regex verwenden:

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

4voto

Sagar Pandya Punkte 9081

Wie prüft man in Ruby, ob eine Zeichenkette eine Teilzeichenkette enthält?

Wenn Sie "prüfen" sagen, nehme ich an, dass Sie einen booleschen Wert zurückerhalten wollen, in diesem Fall können Sie String#match? . match? akzeptiert Zeichenketten oder Regexe als ersten Parameter, im ersten Fall wird er automatisch in einen Regex umgewandelt. Ihr Anwendungsfall wäre also folgender:

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

String#match? hat den zusätzlichen Vorteil eines optionalen zweiten Arguments, das einen Index angibt, ab dem die Zeichenfolge gesucht werden soll. Standardmäßig ist dieser auf 0 .

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

2voto

Prabhakar Undurthi Punkte 6202
user_input = gets.chomp
user_input.downcase!

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

So können Sie prüfen, ob die Zeichenkette eine Teilzeichenkette enthält oder nicht

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

0voto

d1jhoni1b Punkte 6613

Falls man keine der oben genannten Bibliotheken verwenden kann, könnte man das gleiche mit einer einfachen Textsuche erreichen (dies ignoriert Fälle wegen downcase ) :

ADD_BUTTON_TEXTS = ["add to cart", "add to basket"].freeze
target_text = "AdD tO cArT"
ADD_BUTTON_TEXTS.each do |text|
  puts "Text was found" if target_text.downcase.include?(text)
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X