2016-02-25 41 views
1

我試圖去雖然陣列,並從該數組到另一個對象添加字符。問題是我不斷收到錯誤「字符的實例不可索引」。然而,當我運行tag:= tag時,do塊之外的char就起作用了。如何連接do塊中的字符串?

|data startTag tag|. 
data := '123456778' 
startTag := false. 
tag := ''. 
data asArray do: [:char | 
    tag := tag,char] 

回答

3

,被定義爲

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')" 
+0

謝謝,但我不知道這是否會爲我所需要的工作。我實際上試圖完成的是閱讀一個網頁的HTML,並從HTML中提取所有的開始標籤。所以,當我打了「<」我要開始串聯串,直到我打「>」,這是我該字符串添加到集合,然後重新開始。 – MikeC

+1

你確定要用手做這個嗎?有*的爲*工具......(例如,在菲羅我們有湯,Python的BeautifulSoup的端口:http://smalltalkhub.com/#!/~PharoExtras/Soup)。 –