Ruby - заменить символы в строке символом - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь получить строку символов и изменить все символы, кроме пробелов, на "*".Вот где я нахожусь:

def change_word(word)
  new_word.each {|replace| replace.gsub!(/./, "*") }
  new_word.to_s
  new_word.join
end

Я беру слово, добавляю отдельные символы в массив и присваиваю его новой переменной, заменяя все в указанном массиве требуемым символом, изменяя все вмассив в строку и затем объединение всего в массиве для вывода связки *.

Что я хотел бы сделать (и не обязательно, чтобы решение следовало предыдущему синтаксису), это взять все буквыи заменить их на *.Пробелы должны оставаться как пробел, только буквы должны становиться *.

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Когда первый аргумент метода tr String начинается с «^», это означает: все, кроме.Так что «^» означает все, кроме пробела.

word = "12 34 rfv"
word.tr("^ ","*")  # => "** ** ***" 
0 голосов
/ 18 декабря 2018

Как насчет gsub(/\S/, '*')

Он найдет все непробельные символы и заменит каждого из них на *.\S - это класс символов регулярного выражения , соответствующий непробельным символам (спасибо @jdno).

Например,

 pry> "as12 43-".gsub(/\S/, '*')
 => "**** ***"

Так в вашем случае:

def change_word(word)
   word.gsub(/\S/, '*')
end 

Вы также можете извлечь регулярное выражение вне метода, чтобы немного его оптимизировать:

CHANGE_WORD_PATTERN = /\S/
def change_word(word)
   word.gsub(CHANGE_WORD_PATTERN, '*')
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...