我在两个字符串之间插入标签时遇到了一些麻烦。
stringOne := 'Name'.
stringTwo := 'Address'.
我试过了:
info := stringOne, String tab, stringTwo.
或
info := stringOne, Character tab asString, stringTwo.
但这两条消息都没有被理解。我正在使用Visual Works。
答案 0 :(得分:3)
Goog为您提供了一种制作包含标签
的字符串的方法String with: Tab
并且你自己发现在VisualWorks中没有理解Tab,应该用
代替Character tab
所以将这两个东西放在一起在工作区中评估以检查它是否包含一个包含制表符的字符串
String with: Character tab
然后在你的连接中使用它
info := stringOne, (String with: Character tab), stringTwo.
(如果您要进行大量连接,请使用WriteStream
而不是,
)
答案 1 :(得分:2)
我没有要检查的Visual Works,但在IBM Smalltalk中Tab
(注意案例)是一个制表符。
也许试试这个:
info := stringOne, Tab asString, stringTwo.
编辑(重新:你的评论):
好的,Tab
不是标签字符的正确名称,或者您的字符类不响应asString
尝试看看Tab class
给出的内容,如果它回答“字符”,那么您只需要找到如何在VisualWorks中将字符更改为字符串。如果它没有回答“字符”,那么我们在VisualWorks中找不到正确的制表符字符名称。
EDIT2:
我不知道在Visual Works中将字符转换为字符串的简短方法,所以这里的解决方案无论如何都应该有效。这就是asString
无论如何都要做的事情:
由于您可能希望多次使用它,因此可以将其保存为字符串,
tabString := String with: Tab.
info := stringOne, tabString, stringTwo
答案 2 :(得分:2)
最短的使用宏扩展:
info := '<1s><T><2s>' expandMacrosWith: one with: two
答案 3 :(得分:0)
基于WriteStream的解决方案(它有点冗长,但可以很好地扩展,你可以在循环中使用它,比如do:separatedBy)
ws := (String new:50) writeStream.
ws
nextPutAll: stringOne;
tab;
nextPutAll: stringTwo.
info := ws contents.
或者如果你真的喜欢一个班轮代码:
info := (String new writeStream) nextPutAll: stringOne; tab; nextPutAll: stringTwo; contents.