2013-10-06 4 views
0

Когда вы перебираете строки текста, что является самым простым способом (большинство «Ruby»), чтобы выполнить оператор if else (или аналогичный), чтобы проверить, является ли строка одним словом или нет ?Проверьте, содержит ли строка одно слово или более.

def check_if_single_word(string) 
    # code here 
end 

s1 = "two words" 
s2 = "hello" 

check_if_single_word(s1) -> false 
check_if_single_word(s2) -> true 
+0

Обрезать строку первый, то поиск пространства, или соответствовать регулярному выражению. Я не знаю рубина, поэтому не могу предоставить код. – Bathsheba

+0

Почему это достойно -1? если мы не сможем использовать этот форум, чтобы задать простые вопросы, тогда почему бы и нет? –

+1

Я не сторонник (или активист), но этот вопрос может быть истолкован как пограничный с точки зрения уровня исследований, которые вы предприняли перед постановкой вопроса. – Bathsheba

ответ

4

Поскольку вы спрашиваете о 'самой Руби' Кстати, я бы переименовать метод single_word?

Один из способов - проверить наличие символа пробела.

def single_word?(string) 
    !string.strip.include? " " 
end 

Но если вы хотите, чтобы конкретный набор символов, которые соответствуют вашему определения слова, возможно, в том числе апострофов и дефисов, используйте регулярное выражение:

def single_word?(string) 
    string.scan(/[\w'-]+/).length == 1 
end 
+0

Я бы дал * + 1 * вашему первому коду ... :) который является 'string.include? "". –

1

Я бы проверял, существует ли пространство в строке.

def check_if_single_word(string) 
    return !(string.strip =~//) 
end 

.strip удалит лишнее пространство, которое может существовать в начале и в конце строки.

!(myString =~//) означает, что строка не соответствует регулярному выражению одного пробела. Аналогичным образом вы также можете использовать !string.strip[/ /].

1

Здесь какой-то код может помочь вам:

def check_if_single_word(string) 
    ar = string.scan(/\w+/) 
    ar.size == 1 ? "only one word" : "more than one word" 
end 

s1 = "two words" 
s2 = "hello" 
check_if_single_word s1 # => "more than one word" 
check_if_single_word s2 # => "only one word" 

def check_if_single_word(string) 
    string.scan(/\w+/).size == 1 
end 

s1 = "two words" 
s2 = "hello" 
check_if_single_word s1 # => false 
check_if_single_word s2 # => true 
+0

Мне нравятся логические параметры с одной стороны от «:» в вашей третьей строке. Upvote! –

0

рубиновый путь. Продлить Calss String

class String 

    def one? 
    !self.strip.include? " " 
    end 

end 

Затем используйте "Hello world".one? для проверки, если строка содержит одно слово или больше.

+0

Вам не нужно использовать 'self' ... –

+0

Я бы не рекомендовал monkeypatching встроенный для новичка. Я также не рекомендовал бы имя «один?», Поскольку он недостаточно понятен. –

+0

У вас также есть ошибка. Попробуйте выполнить это в irb, вы увидите это. –

2

В соответствии с Вашим определением слова данного в комментарии:

[A] stripped string that doesn't [include] whitespace 

код будет

def check_if_single_word(string) 
    string.strip == string and string.include?(" ").! 
end 

check_if_single_word("two words") # => false 
check_if_single_word("New York") # => false 
check_if_single_word("hello") # => true 
check_if_single_word(" hello") # => false 
+0

strip == self - вы используете метод 'strip' как автономный объект? Можно ли это сделать со всеми методами? Первый раз я это видел. –

+0

Это была ошибка. – sawa

+0

Еще одна интересная вещь, которую я вижу в первый раз, отрицая как метод после утверждения. Так что //string.include? ("").! ==! string.include? ("") //? –

Смежные вопросы