สมมติว่าเรามีสตริงดังนี้:
Hello, my\n name is Michael.
ฉันจะลบบรรทัดใหม่นั้นและตัดช่องว่างเหล่านั้นหลังจากนั้นเป็นหนึ่งในสตริงเพื่อรับสิ่งนี้ได้อย่างไร
Hello, my name is Michael.
สมมติว่าเรามีสตริงดังนี้:
Hello, my\n name is Michael.
ฉันจะลบบรรทัดใหม่นั้นและตัดช่องว่างเหล่านั้นหลังจากนั้นเป็นหนึ่งในสตริงเพื่อรับสิ่งนี้ได้อย่างไร
Hello, my name is Michael.
คำตอบ:
ตรวจสอบsquish
วิธีRails :
some_string.strip.gsub(/\s+/, " ")
สิ่งที่ squish ทำ
squish
เพื่อแสดงให้เห็นถึง Rubys ในตัว :
string.gsub("\n", ' ').squeeze(' ')
squeeze(' ')
เพียงแค่บีบช่องว่าง "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy"
.
วิธีที่ง่ายที่สุดก็คงจะเป็น
s = "Hello, my\n name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."
ลองสิ่งนี้:
s = "Hello, my\n name is Michael."
s.gsub(/\n\s+/, " ")
my_string = "Hello, my\n name is Michael."
my_string = my_string.gsub( /\s+/, " " )
\n
อุดมคติ (ฉันรู้สึกว่า) มันควรจะแทนที่ด้วยช่องว่างในกรณีเช่น"Hello,\nMy name is Michael"
regex นี้จะแทนที่อินสแตนซ์ของช่องว่างสีขาว 1 ช่องหรือมากกว่าด้วยช่องว่าง 1 ช่อง ps \s
จะแทนที่อักขระช่องว่างทั้งหมดซึ่งรวมถึง\s\t\r\n\f
:
a_string.gsub!(/\s+/, ' ')
ในทำนองเดียวกันสำหรับการคืนรถเท่านั้น
str.gsub!(/\n/, " ")
ก่อนอื่นให้แทนที่ทั้งหมด\n
ด้วยช่องว่างสีขาวจากนั้นใช้ regex ลบช่องว่างสีขาวหลายรายการ
ใช้สตริง # gsub :
s = "Hello, my\n name is Michael."
s.gsub(/\s+/, " ")
"Hello,\nMy name is Michael"
. ตามหลักการแล้วคุณต้องการพื้นที่ที่มี\n
Use squish
currency = " XCD"
str = currency.squish
str = "XCD" #=> "XCD"
คุณสามารถเพิ่มเฉพาะsquish
เมธอด (และไม่มีอะไรอื่น) ให้กับ Ruby โดยรวมเฉพาะ Ruby Facet นี้:
https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/squish.rb
require 'facets/string/squish'
จากนั้นใช้
"my \n string".squish #=> "my string"
ไม่ต้องใช้ Rails