Skip to content

Commit e1bc92d

Browse files
BurdetteLamarpeterzhu2118
authored andcommitted
[DOC] Tweaks for String#delete
1 parent b0db93c commit e1bc92d

File tree

2 files changed

+80
-7
lines changed

2 files changed

+80
-7
lines changed

doc/string/delete.rdoc

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
Returns a new string that is a copy of +self+ with certain characters removed;
2+
the removed characters are all instances of those specified by the given string +selectors+.
3+
4+
For one 1-character selector,
5+
removes all instances of that character:
6+
7+
s = 'abracadabra'
8+
s.delete('a') # => "brcdbr"
9+
s.delete('b') # => "aracadara"
10+
s.delete('x') # => "abracadabra"
11+
s.delete('') # => "abracadabra"
12+
13+
s = 'тест'
14+
s.delete('т') # => "ес"
15+
s.delete('е') # => "тст"
16+
17+
s = 'よろしくお願いします'
18+
s.delete('よ') # => "ろしくお願いします"
19+
s.delete('し') # => "よろくお願います"
20+
21+
For one multi-character selector,
22+
removes all instances of the specified characters:
23+
24+
s = 'abracadabra'
25+
s.delete('ab') # => "rcdr"
26+
s.delete('abc') # => "rdr"
27+
s.delete('abcd') # => "rr"
28+
s.delete('abcdr') # => ""
29+
s.delete('abcdrx') # => ""
30+
31+
Order and repetition do not matter:
32+
33+
s.delete('ba') == s.delete('ab') # => true
34+
s.delete('baab') == s.delete('ab') # => true
35+
36+
For multiple selectors,
37+
forms a single selector that is the intersection of characters in all selectors
38+
and removes all instances of characters specified by that selector:
39+
40+
s = 'abcdefg'
41+
s.delete('abcde', 'dcbfg') == s.delete('bcd') # => true
42+
s.delete('abc', 'def') == s.delete('') # => true
43+
44+
In a character selector, three characters get special treatment:
45+
46+
- A caret (<tt>'^'</tt>) functions as a _negation_ operator
47+
for the immediately following characters:
48+
49+
s = 'abracadabra'
50+
s.delete('^bc') # => "bcb" # Deletes all except 'b' and 'c'.
51+
52+
- A hyphen (<tt>'-'</tt>) between two other characters defines a _range_ of characters:
53+
54+
s = 'abracadabra'
55+
s.delete('a-c') # => "rdr" # Deletes all 'a', 'b', and 'c'.
56+
57+
- A backslash (<tt>'\'</tt>) acts as an escape for a caret, a hyphen,
58+
or another backslash:
59+
60+
s = 'abracadabra'
61+
s.delete('\^bc') # => "araadara" # Deletes all '^', 'b', and 'c'.
62+
s.delete('a\-c') # => "brdbr" # Deletes all 'a', '-', and 'c'.
63+
'foo\bar\baz'.delete('\\') # => "foobarbaz" # Deletes all '\'.
64+
65+
These usages may be mixed:
66+
67+
s = 'abracadabra'
68+
s.delete('a-cq-t') # => "d" # Multiple ranges.
69+
s.delete('ac-d') # => "brbr" # Range mixed with plain characters.
70+
s.delete('^a-c') # => "abacaaba" # Range mixed with negation.
71+
72+
For multiple selectors, all forms may be used, including negations, ranges, and escapes.
73+
74+
s = 'abracadabra'
75+
s.delete('^abc', '^def') == s.delete('^abcdef') # => true
76+
s.delete('a-e', 'c-g') == s.delete('cde') # => true
77+
s.delete('^abc', 'c-g') == s.delete('defg') # => true
78+
79+
Related: see {Converting to New String}[rdoc-ref:String@Converting+to+New+String].

string.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8937,13 +8937,7 @@ rb_str_delete_bang(int argc, VALUE *argv, VALUE str)
89378937
* call-seq:
89388938
* delete(*selectors) -> new_string
89398939
*
8940-
* Returns a copy of +self+ with characters specified by +selectors+ removed
8941-
* (see {Multiple Character Selectors}[rdoc-ref:character_selectors.rdoc@Multiple+Character+Selectors]):
8942-
*
8943-
* "hello".delete "l","lo" #=> "heo"
8944-
* "hello".delete "lo" #=> "he"
8945-
* "hello".delete "aeiou", "^e" #=> "hell"
8946-
* "hello".delete "ej-m" #=> "ho"
8940+
* :include: doc/string/delete.rdoc
89478941
*
89488942
*/
89498943

0 commit comments

Comments
 (0)