Руби утверждает, что » » на самом деле это не пробел?

#ruby

#ruby

Вопрос:

Я пытаюсь устранить причину, по которой Ruby не разбивает мою строку на пустые пробелы. Например:

 [1] pry(#<irb>)> msg
=> "!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName"
[2] pry(#<irb>)> msg.split(" ")
=> ["!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName"]
[3] pry(#<irb>)> msg.include? " "
=> false
[8] pry(#<irb>)> msg.inspect
=> ""!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName""
[9] pry(#<irb>)> 
 

Как вы можете видеть выше, моя строка, похоже, содержит пробелы, но split метод с ней не работает. Я попытался запустить inspect строку, просто чтобы посмотреть, отображается ли что-то еще, но для меня это не имеет большого смысла.

Ответ №1:

Либо строка содержит какой-то другой вид пробела, либо вы разбиваете на какой-то другой вид пробела. Например "foou2002bar" , будет выглядеть foo bar , но содержит специальный пробел.

Попробуйте msg.dump увидеть специальные символы.

 2.6.5 :008 > msg = "foou2002bar"
 => "foo bar" 
2.6.5 :009 > msg.dump
 => ""foo\u2002bar"" 
 

Чтобы разделить на любой пробел или табуляцию, разделите [[:blank:]] класс символов.

 2.6.5 :006 > msg.split(/[[:blank:]]/)
 => ["foo", "bar"] 
 

Комментарии:

1. Спасибо. msg.dump на самом деле отображалось u0040 как то, что отображалось как пробел / пробел. Это решение сработало для меня.

2. @LewlSauce u0040 — это @ . Вы уверены?

3. Извините, опечатка. Это было на самом деле u00A0

4. @LewlSauce Неразрывный пробел. Рад, что все работает.