programing

문자열에서 하위 문자열 제거

firstcheck 2023. 6. 2. 22:45
반응형

문자열에서 하위 문자열 제거

다른 문자열에서 문자열을 제거하는 방법이 있는지 궁금합니다.이와 같은 것:

class String
  def remove(s)
    self[s.length, self.length - s.length]
  end
end

슬라이스 방법을 사용할 수 있습니다.

a = "foobar"
a.slice! "foo"
=> "foo"
a
=> "bar"

'!' 버전이 아닌 버전도 있습니다.다른 버전에 대한 자세한 내용은 설명서에서도 확인할 수 있습니다. http://www.ruby-doc.org/core/classes/String.html#method-i-slice-21

어때.str.gsub("subString", "")Ruby Doc 확인하기

문자열의 끝인 경우 다음을 사용할 수도 있습니다.

"hello".chomp("llo")     #=> "he"

루비 2.5+

하위 문자열이 문자열의 끝에 있는 경우, Ruby 2.5는 이를 위한 방법을 도입했습니다.

  • delete_substring을 문자열의 시작 부분에서 제거하기 위해 사용합니다.
  • delete_substring을 문자열 끝에서 제거하기 위한 명령어

대상 문자열이 하나만 있는 경우 다음을 사용할 수 있습니다.

str[target] = ''

또는

str.sub(target, '')

대상이 여러 번 발생하는 경우 다음을(를 수행합니다.

str.gsub(target, '')

예를 들어:

asdf = 'foo bar'
asdf['bar'] = ''
asdf #=> "foo "

asdf = 'foo bar'
asdf.sub('bar', '') #=> "foo "
asdf = asdf + asdf #=> "foo barfoo bar"
asdf.gsub('bar', '') #=> "foo foo "

인플레이스 대체를 수행해야 하는 경우"!"의 버전.gsub!그리고.sub!.

Rails를 사용하는 경우에도 마찬가지입니다.

예."Testmessage".remove("message")수확량"Test".

경고: 이 메서드는 모든 항목을 제거합니다.

레일을 사용하거나 지원이 덜 활성화된 경우 String#remove 및 String#remove! 메서드를 사용할 수 있습니다.

def remove!(*patterns)
  patterns.each do |pattern|
    gsub! pattern, ""
  end

  self
end

출처: http://api.rubyonrails.org/classes/String.html#method-i-remove

만약 제가 올바르게 해석하고 있다면, 이 질문은 문자열 사이의 마이너스(-) 연산, 즉 내장된 플러스(+) 연산(연결)과 반대되는 연산을 요구하는 것 같습니다.

이전 답변과 달리 속성을 준수해야 하는 작업을 정의하려고 합니다.

if c = a + b 다음 c - a = b BAND c - b = a ▁a a

이를 위해 다음과 같은 세 가지 기본 제공 Ruby 방법만 필요합니다.

'abracadabra'.partition('abra').values_at(0,2).join == 'cadabra'.

한 번에 한 가지 방법을 실행하면 쉽게 이해할 수 있기 때문에 어떻게 작동하는지 설명하지 않겠습니다.

개념 증명 코드는 다음과 같습니다.

# minus_string.rb
class String
  def -(str)
    partition(str).values_at(0,2).join
  end
end

# Add the following code and issue 'ruby minus_string.rb' in the console to test
require 'minitest/autorun'

class MinusString_Test < MiniTest::Test

  A,B,C='abra','cadabra','abracadabra'

  def test_C_eq_A_plus_B
    assert C == A + B
  end

  def test_C_minus_A_eq_B
    assert C - A == B
  end

  def test_C_minus_B_eq_A
    assert C - B == A
  end

end

최신 Ruby 버전(>= 2.0)을 사용하는 경우 마지막으로 조언할 말이 있습니다. 이전 예와 같이 원숭이가 지정한 String 대신 Refinitions를 사용합니다.

이는 다음과 같이 쉽습니다.

module MinusString
  refine String do
    def -(str)
      partition(str).values_at(0,2).join
    end
  end
end

추가using MinusString당신이 필요로 하는 블록 앞에서.

제가 할 일은 이렇습니다.

2.2.1 :015 > class String; def remove!(start_index, end_index) (end_index - start_index + 1).times{ self.slice! start_index }; self end; end;
2.2.1 :016 >   "idliketodeleteHEREallthewaytoHEREplease".remove! 14, 32
 => "idliketodeleteplease" 
2.2.1 :017 > ":)".remove! 1,1
 => ":" 
2.2.1 :018 > "ohnoe!".remove! 2,4
 => "oh!" 

여러 줄로 포맷됨:

class String
    def remove!(start_index, end_index)
        (end_index - start_index + 1).times{ self.slice! start_index }
        self
    end 
end

언급URL : https://stackoverflow.com/questions/5367164/remove-substring-from-the-string

반응형