모든 공백 을 제거하는 Ruby 기능은 무엇입니까 ? PHP와 같은 것을 찾고 trim()
있습니까?
String#strip
하거나 일치 하는 모든 답변 /\s+/
은 ASCII 공백 만 제거합니다. ASCII가 아닌 공백도 캡처하려면 (예 : HTML  
) @EBooker의 이상한 대답을 참조하십시오.
모든 공백 을 제거하는 Ruby 기능은 무엇입니까 ? PHP와 같은 것을 찾고 trim()
있습니까?
String#strip
하거나 일치 하는 모든 답변 /\s+/
은 ASCII 공백 만 제거합니다. ASCII가 아닌 공백도 캡처하려면 (예 : HTML  
) @EBooker의 이상한 대답을 참조하십시오.
답변:
PHP의 트림과 같이 선행 및 후행 공백 만 제거하려면을 사용할 수 .strip
있지만 모든 공백 을 제거 하려면 .gsub(/\s+/, "")
대신 을 사용할 수 있습니다 .
s = "I have white space".delete(' ')
그리고 PHP의 trim()
기능 을 에뮬레이트하려면 :
s = " I have leading and trailing white space ".strip
.delete(' ').delete('\t').delete('\n') ...
은 지나치게 장황하며 오타와 누락 오류에 대한 많은 기회를 제공합니다.
trim()
줄 바꿈 및 기타 공백 문자를 제거하지는 않습니다. 모호한 질문에 대한 하나의 해석을 선택하고 있습니다.
delete()
전화를.)
관련 답변 :
" clean up my edges ".strip
보고
"clean up my edges"
nil
일 가능성이있는 .to_s
경우 strip 메소드가 오류를 일으키지 않도록 strip 을 실행 하기 전에 method를 실행 하십시오 . 전의. str=nil; str.to_s.strip #=> ""
String#strip
-시작과 끝에서 모든 공백을 제거하십시오.
String#lstrip
-처음부터.
String#rstrip
-끝에서.
String#chomp
(인수없이)- 끝에서 줄 구분 기호 ( \n
또는 \r\n
)를 삭제합니다 .
String#chop
-마지막 문자를 삭제합니다.
String#delete
-- x.delete(" \t\r\n")
나열된 모든 공백을 삭제합니다.
String#gsub
- 유니 코드x.gsub(/[[:space:]]/, '')
공백을 포함하여 모든 공백을 제거 합니다 .
참고 : 위의 모든 메소드는 원본을 변경하지 않고 새 문자열을 반환합니다. 문자열을 제자리에서 변경 !
하려면 끝에 해당 메소드를 호출하십시오 .
\s
슬래시 대신 따옴표로 묶습니다. 또한 문서에서 delete가 정규 표현식을 인수로 사용할 수 있다는 언급을 찾을 수 없습니다.
#strip
하지 않습니다. stackoverflow.com/questions/4859438/…
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"
삭제 작업이 더 빠름 =)
user system total real
gsub, s 0.180000 0.010000 0.190000 (0.193014)
gsub, s+ 0.200000 0.000000 0.200000 (0.196408)
gsub, space 0.220000 0.000000 0.220000 (0.222711)
gsub, join 0.200000 0.000000 0.200000 (0.193478)
delete 0.040000 0.000000 0.040000 (0.045157)
spaces
하지는 않습니다white spaces
delete(" \t\r\n")
일반적인 공백을 처리하고 여전히 gsub보다 빠릅니다.
Rails / ActiveSupport 를 사용 squish
하는 경우 메소드 를 사용할 수 있습니다 . 문자열의 양쪽 끝에서 공백을 제거하고 여러 공백을 단일 공백으로 그룹화합니다.
예를 들어.
" a b c ".squish
결과는 다음과 같습니다.
"a b c"
api.rubyonrails.org에서이 참조를 확인하십시오 .
require 'active_support/core_ext/string/filters'
"a \t \n \f \r \v b".squish == "a b"
조금 늦었지만이 페이지를 탐색하는 다른 사람이이 버전에 관심이있을 수 있습니다.
사용자가 어떻게 든 앱에 잘라 붙여 넣을 수 있지만 미리 단어 간격을 유지하는 미리 서식이 지정된 텍스트 청크를 정리하려면 다음을 시도하십시오.
content = " a big nasty chunk of something
that's been pasted from a webpage or something and looks
like this
"
content.gsub(/\s+/, " ").strip
#=> "a big nasty chunk of something that's been pasted from a webpage or something and looks like this"
squish
: 방법 apidock.com/rails/String/squish
squeeze(" ")
작동 할 수 있습니다.
루비의 .strip
메소드는 PHP와 같은 기능을 수행합니다 trim()
.
모든 공백을 제거하려면
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tass는 내 원래 답변이 연속으로 중복 문자를 제거한다는 것을 알았습니다. 이후 Rails 프레임 워크를 사용하는 경우 그러한 발생에 대해 더 똑똑한 squish 메소드로 전환했습니다.
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
"good men".squeeze.strip
반환됩니다"god men"
또한 잊지 마십시오 :
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
[" Hello World", "Big Giraffe "].map(&:split).map(&:join) #=> ["HelloWorld", "BigGiraffe"]
split.join
문자열의 모든 공간을 폭파합니다.
" a b c d ".split.join
> "abcd"
타이핑하고 기억하기가 쉽기 때문에 콘솔과 빠른 해킹에 좋습니다. 의도를 가리기 때문에 심각한 코드에서는 환영받지 못할 것입니다.
( 위 Justicle의 답변 에서 Piotr의 의견을 기반으로 함 )
gsub를 사용하거나 삭제하십시오. 차이점은 gsub가 탭을 제거 할 수 있지만 삭제는 할 수 없다는 것입니다. 때로는 편집기에서 추가 한 파일에 탭이 있습니다.
a = "\tI have some whitespaces.\t"
a.gsub!(/\s/, '') #=> "Ihavesomewhitespaces."
a.gsub!(/ /, '') #=> "\tIhavesomewhitespaces.\t"
a.delete!(" ") #=> "\tIhavesomewhitespaces.\t"
a.delete!("/\s/") #=> "\tIhavesomewhitespaces.\t"
a.delete!('/\s/') #=> using single quote is unexpected, and you'll get "\tI have ome whitepace.\t"
gsub 방법은 잘 작동합니다.
gsub 메소드는 문자열에서 호출 할 수 있으며 다음과 같이 말합니다.
a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring
gsub 메소드는 첫 번째 인수가 발생할 때마다 검색하여 두 번째 인수로 바꿉니다. 이 경우 문자열 내의 모든 공간을 바꾸고 제거합니다.
또 다른 예:
b = "the white fox has a torn tail"
모든 문자 "t"를 대문자 "T"로 바꿉니다.
b = b.gsub("t","T")
puts b
#Output: The whiTe fox has a Torn Tail
PHP trim
와 정확히 일치하는 동작의 경우 가장 간단한 방법은 String#strip
다음과 같이 해당 방법 을 사용하는 것입니다.
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated [#{new_string}]:#{new_string.length}"
루비에는 또한 위치 내 편집 버전 String.strip!
(후미 '!')이 있습니다. 문자열 복사본을 만들 필요가 없으며 일부 용도에서는 훨씬 더 빠를 수 있습니다.
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated [#{string}]:#{string.length}"
두 버전 모두이 출력을 생성합니다.
Original [ Many have tried; many have failed! ]:40
Updated [Many have tried; many have failed!]:34
나는 몇 가지 기본적인 용도의 성능을 테스트하는 벤치 마크를 생성 strip
하고 strip!
잘 어떤 대안과 같음. 테스트는 이렇습니다 :
require 'benchmark'
string = 'asdfghjkl'
Times = 25_000
a = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
b = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
c = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
d = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
puts RUBY_DESCRIPTION
puts "============================================================"
puts "Running tests for trimming strings"
Benchmark.bm(20) do |x|
x.report("s.strip:") { a.each {|s| s = s.strip } }
x.report("s.rstrip.lstrip:") { a.each {|s| s = s.rstrip.lstrip } }
x.report("s.gsub:") { a.each {|s| s = s.gsub(/^\s+|\s+$/, "") } }
x.report("s.sub.sub:") { a.each {|s| s = s.sub(/^\s+/, "").sub(/\s+$/, "") } }
x.report("s.strip!") { a.each {|s| s.strip! } }
x.report("s.rstrip!.lstrip!:") { b.each {|s| s.rstrip! ; s.lstrip! } }
x.report("s.gsub!:") { c.each {|s| s.gsub!(/^\s+|\s+$/, "") } }
x.report("s.sub!.sub!:") { d.each {|s| s.sub!(/^\s+/, "") ; s.sub!(/\s+$/, "") } }
end
결과는 다음과 같습니다.
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14]
============================================================
Running tests for trimming strings
user system total real
s.strip: 2.690000 0.320000 3.010000 ( 4.048079)
s.rstrip.lstrip: 2.790000 0.060000 2.850000 ( 3.110281)
s.gsub: 13.060000 5.800000 18.860000 ( 19.264533)
s.sub.sub: 9.880000 4.910000 14.790000 ( 14.945006)
s.strip! 2.750000 0.080000 2.830000 ( 2.960402)
s.rstrip!.lstrip!: 2.670000 0.320000 2.990000 ( 3.221094)
s.gsub!: 13.410000 6.490000 19.900000 ( 20.392547)
s.sub!.sub!: 10.260000 5.680000 15.940000 ( 16.411131)
내 개인적인 취향은 방법을 사용하고 있습니다 .tr
에서와 같이 :
string = "this is a string to smash together"
string.tr(' ', '') # => "thisisastringtosmashtogether"
공백 이 아닌 모든 공백을 삭제하려면 다음과 같이 작성해야합니다.
string = "this is a string with tabs\t and a \nnewline"
string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
spaces
하지 않습니다all white spaces
s.tr(" \t\n", '')
대신 사용 을 고려하십시오 .
루비 .scan()
와 .join()
String 메소드는 문자열의 공백을 극복하는 데 도움이 될 수 있습니다.
scan(/\w+/).join
모든 공백을 제거하고 문자열을 결합합니다
string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"
또한 문자열의 왼쪽과 오른쪽 부분에서 공백을 제거합니다. 수단 ltrim
, rtrim
및 trim
. 이런 경우에 누군가가 배경 위에있는 경우 C
, FoxPro
또는 Visual Basic
하고 뛰어 Ruby
.
2.1.6 :002 > string = " White spaces in me ".scan(/\w+/).join
=> "Whitespacesinme"
2.1.6 :003 > string = " White spaces in me".scan(/\w+/).join
=> "Whitespacesinme"
2.1.6 :004 > string = "White spaces in me ".scan(/\w+/).join
=> "Whitespacesinme"
2.1.6 :005 >
나는 이와 같은 것을 사용할 것이다 :
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
게임에 약간 늦었지만을 사용하여 후행 및 선행 공백을 제거 strip!
합니다. 내가 한 것처럼 배열이있는 경우 배열을 반복하고 인스턴스가 끝난 후에 저장해야했습니다. ! 이것을 처리했습니다. 이것은 첫 번째 선행 또는 마지막 후행뿐만 아니라 끝 또는 시작 부분의 모든 공백을 제거했습니다.
예를 들면 다음과 같습니다.
array = ["hello "," Melanie", "is", " new ", "to ", " programming"]
array.each do |i|
i.strip!
end
[ "hello", "Melanie", "is", "new", "to", "programming"]으로 출력됩니다. 나는 비슷한 질문에 대해이 코드를 강조하기 위해 만든 비디오에서 이것을 더 탐구 / 공유했습니다 .
프로그래밍을 처음 접했고 루프가 끝난 후 배열에 저장하지 않았기 때문에 strip을 사용하지 못했습니다.