的,
被定義爲
Collection>>, aCollection
^self copy addAll: aCollection; yourself
,使試圖在你的單個字符,就好像它是一個集合操作。這解釋了錯誤。
對於你不想建立使用,
的,因爲每一次發生在拷貝大集合。因此,可以使用流式傳輸協議:
|data tag|
data := '123456778'.
tag := String streamContents: [:s |
data do: [ :char |
s nextPut: char]]
而且看看Collection>>do:separatedBy:
你的數據之間添加分隔符。
[編輯]嗯,好,那是像
|data tag tags state|
data := '<html>bla 12 <h1/></html>'.
state := #outside.
tags := OrderedCollection new.
tag := ''.
data do: [ :char |
state = #outside ifTrue: [
char = $< ifTrue: [
state := #inside.
tag := '' ]]
ifFalse: [
char = $> ifTrue: [
state := #outside.
tags add: tag]
ifFalse: [ tag := tag, (char asString)]]].
tags
"an OrderedCollection('html' 'h1/' '/html')"
謝謝,但我不知道這是否會爲我所需要的工作。我實際上試圖完成的是閱讀一個網頁的HTML,並從HTML中提取所有的開始標籤。所以,當我打了「<」我要開始串聯串,直到我打「>」,這是我該字符串添加到集合,然後重新開始。 – MikeC
你確定要用手做這個嗎?有*的爲*工具......(例如,在菲羅我們有湯,Python的BeautifulSoup的端口:http://smalltalkhub.com/#!/~PharoExtras/Soup)。 –