亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: ruby字串為王 [掃盲篇] [打印本頁(yè)]

作者: zuerrong    時(shí)間: 2010-12-09 16:32
標(biāo)題: ruby字串為王 [掃盲篇]
本帖最后由 zuerrong 于 2010-12-09 16:33 編輯

之所以說(shuō)ruby字串為王,是因?yàn)閞uby是我所見(jiàn)過(guò)的語(yǔ)言里,字串處理最為強(qiáng)大的。

s = "hello"


創(chuàng)建一個(gè)字串。任何字串都是String類的實(shí)例,所以也可以這樣創(chuàng)建:

s = String.new("hello")


字串可以用“<<”聯(lián)合起來(lái):

irb(main):005:0> s << " world"
=> "hello world"


當(dāng)然可以串串燒:

irb(main):006:0> s << " welcome" << " to" << " ruby"
=> "hello world welcome to ruby"


字串跟數(shù)組一樣,可以使用下標(biāo)來(lái)訪問(wèn):

irb(main):007:0> s = "hello world"
=> "hello world"

irb(main):009:0> s[0].chr
=> "h"


還可以使用類似于slice的方法:

irb(main):010:0> s[0..3]
=> "hell"

irb(main):011:0> s[0,3]
=> "hel"


在數(shù)組里講過(guò),這兩者是不同的,前者的3表示位置終結(jié)數(shù)字,后者的3表示長(zhǎng)度。

更勝一籌的是,可以直接取出字串:

irb(main):013:0> s["hello"]
=> "hello"


而子串稱述更可以是正則表達(dá)式:

irb(main):014:0> s[/^\w+/]
=> "hello"


跟數(shù)組一樣,字串也支持insert方法:

irb(main):022:0> s= "prety"
=> "prety"

irb(main):023:0> s.insert(-2,"t")
=> "pretty"


表示在-2的位置,插入一個(gè)"t"。

修改字串在ruby里是如此方便,直接像數(shù)組一樣使用下標(biāo)即可:

irb(main):024:0> s = "nice girl"
=> "nice girl"

irb(main):025:0> s[0,4] = "helo"
=> "helo"

irb(main):026:0> s
=> "helo girl"


除了下標(biāo)還可以用正則表達(dá)式:

irb(main):032:0> s[/^\w+/] = "prety"
=> "prety"

irb(main):033:0> s
=> "prety girl"


字串的chop和chomp方法作用不同,前者刪除最后一個(gè)字符,后者刪除換行號(hào):

irb(main):034:0> "hello".chop
=> "hell"

irb(main):035:0> "hello\n".chomp
=> "hello"


去除字串兩邊空格:

irb(main):076:0> " abc ".strip
=> "abc"


去除左邊空格:

irb(main):077:0> " abc ".lstrip
=> "abc "


去除右邊空格:

irb(main):078:0> " abc ".rstrip
=> " abc"


還可以使用delete方法刪除字串里的字符:

irb(main):036:0> "hello".delete("l")
=> "heo"


最常用的字串操作方法包括gsub和scan,都支持正則表達(dá)式。

irb(main):037:0> s="hello world"
=> "hello world"

irb(main):038:0> s.gsub(/^\w+/,"kind")
=> "kind world"

irb(main):039:0> s.scan(/\w+/)
=> ["hello", "world"]


gsub執(zhí)行子串替換,把匹配到的內(nèi)容替換成第二個(gè)參數(shù)的內(nèi)容。
scan執(zhí)行字串查找,返回一個(gè)結(jié)果數(shù)組。

字串可以split成數(shù)組:

irb(main):044:0> s.split(//)
=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]


split同樣支持正則表達(dá)式。

字串轉(zhuǎn)換成整數(shù)或浮點(diǎn):

irb(main):060:0> "123".to_i
=> 123

irb(main):061:0> "123".to_f
=> 123.0


each_byte可以遍歷一個(gè)字串:

irb(main):047:0> "matz".each_byte { |b| puts b.chr }         
m
a
t
z
=> "matz"


顧名思義,downcase和upcase方法轉(zhuǎn)換大小寫:

irb(main):048:0> "I LOVE RUBY".downcase
=> "i love ruby"

irb(main):049:0> "I love Ruby".upcase
=> "I LOVE RUBY"


字串的長(zhǎng)度:

irb(main):050:0> "hello".size
=> 5


字串還可以next:

irb(main):053:0> "x".next
=> "y"

irb(main):054:0> "xyz".next
=> "xza"


從a到z怎么遍歷呢?很簡(jiǎn)單:

irb(main):055:0> "a".upto("z") do |s| print s end
abcdefghijklmnopqrstuvwxyz=> "a"


ruby最強(qiáng)大的字串處理,莫過(guò)于跟perl一樣,內(nèi)置正則表達(dá)式。

irb(main):070:0> s = "hello ruby world"
=> "hello ruby world"

irb(main):071:0> s =~ /ruby/
=> 6

irb(main):072:0> s =~ /Ruby/
=> nil


正則表達(dá)式執(zhí)行后,返回的結(jié)果是匹配開(kāi)始的位置,nil表示不匹配。
當(dāng)然,在ruby世界里很多人反過(guò)來(lái)寫:

irb(main):074:0> /ruby/ =~ s
=> 6


第一種寫法表示字串目標(biāo)支持=~方法,參數(shù)是正則表達(dá)式目標(biāo)。
第二種寫法表示正則表達(dá)式目標(biāo)支持=~方法,參數(shù)是字串目標(biāo)。
據(jù)說(shuō)后者效率更高。

字串還有很多實(shí)用方法,運(yùn)行如下語(yǔ)句看看:

irb(main):075:0> String.instance_methods.sort

作者: 2gua    時(shí)間: 2010-12-09 16:35
好帖啊。
作者: 2gua    時(shí)間: 2010-12-10 06:47
文本/字符/正則表達(dá)式的處理,是Ruby的強(qiáng)項(xiàng)。
作者: ziyiu123    時(shí)間: 2011-02-22 19:18
,好長(zhǎng)啊。。。
作者: gr33n    時(shí)間: 2011-11-17 23:08
好強(qiáng)啊。
作者: gr33n    時(shí)間: 2012-02-03 18:58
String.instance_methods.sort

很實(shí)用啊。 啊。
作者: Sevk    時(shí)間: 2012-02-05 17:06
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 李大雙    時(shí)間: 2012-02-06 19:26
:wink::wink:
作者: rubyish    時(shí)間: 2012-02-08 18:36
zuerrong 發(fā)表于 2010-12-09 12:32
之所以說(shuō)ruby字串為王,是因?yàn)閞uby是我所見(jiàn)過(guò)的語(yǔ)言里,字串處理最為強(qiáng)大的。

字串,Array 都比 Perl 強(qiáng)大,簡(jiǎn)單,好用。我所見(jiàn),too。

作者: 2gua    時(shí)間: 2012-02-09 08:26
文字處理是程序處理的基礎(chǔ)工作。
作者: zuerrong    時(shí)間: 2012-02-09 10:35
回復(fù) 9# rubyish


    借鑒了perl很多東西。
不過(guò)ruby是純OO的語(yǔ)言,使用上比perl函數(shù)來(lái)函數(shù)去要清晰一點(diǎn)。
作者: rubyish    時(shí)間: 2012-02-09 15:38
zuerrong 發(fā)表于 2012-02-09 06:35
回復(fù) 9# rubyish

    借鑒了perl很多東西。
不過(guò)ruby是純OO的語(yǔ)言,使用上比perl函數(shù)來(lái)函數(shù)去要清晰一點(diǎn)。

but,有點(diǎn)慢了一點(diǎn)

time perl -E 'say "hello"'
hello

real        0m0.012s
user        0m0.003s
sys        0m0.007s
time ruby -e 'puts "hello"'
hello

real        0m0.076s
user        0m0.060s
sys        0m0.013s


不過(guò)ruby是不錯(cuò)D


作者: zuerrong    時(shí)間: 2012-02-09 18:16
rubyish 發(fā)表于 2012-02-09 15:38
but,有點(diǎn)慢了一點(diǎn)

time perl -E 'say "hello"'


這個(gè)測(cè)試毫無(wú)意義。
作者: 2gua    時(shí)間: 2012-02-10 08:26
慢不慢,永遠(yuǎn)都是爭(zhēng)論的話題,速度上的考慮,不應(yīng)該作為選擇Ruby的主要衡量指標(biāo)哈。
作者: yangsf5    時(shí)間: 2012-11-21 00:11
提供的操作眼花繚亂的,不過(guò)熟悉后,對(duì)處理問(wèn)題就非常方便了。
作者: bikong0411    時(shí)間: 2013-01-24 13:12
總結(jié)的還不錯(cuò)!頂下
作者: patagonia2    時(shí)間: 2014-08-28 17:53
處理字串是程序處理的基礎(chǔ)工作。
作者: yakczh_cu    時(shí)間: 2014-12-14 20:22
  1. str="hellok 中文"


  2. out=str.split(//)
  3. puts out
復(fù)制代碼
invalid multibyte char (US-ASCII)
split-str.rb:6: invalid multibyte char (US-ASCII)
作者: dorodaloo    時(shí)間: 2015-12-26 19:24
Ruby
強(qiáng)
文字處理太重要了




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2