我在两个字符串之间插入制表符时遇到了一些麻烦。
stringOne := 'Name'.
stringTwo := 'Address'.
我试过了:
info := stringOne, String tab, stringTwo.
或者
info := stringOne, Character tab asString, stringTwo.
但是这两条信息都没有被理解。我正在使用视觉作品。
Goog 为您提供了一种制作包含选项卡的字符串的方法
String with: Tab
并且您自己发现 Tab 在 VisualWorks 中不被理解,应该替换为
Character tab
所以把这两件事放在一个工作区中评估以检查它是否给出了一个包含制表符的字符串
String with: Character tab
然后在你的连接中使用它
info := stringOne, (String with: Character tab), stringTwo.
(如果您要进行大量连接,请使用WriteStream
not ,
)
我没有要检查的 Visual Works,但在 IBM Smalltalk 中Tab
(注意大小写)是一个制表符。
也许试试这个:
info := stringOne, Tab asString, stringTwo.
编辑(回复:您的评论):
好的,要么Tab
不是制表符的正确名称,要么您的字符类没有响应asString
尝试查看Tab class
给您的信息,如果它回答“字符”,那么您只需要了解如何将字符更改为字符串在 VisualWorks 中。如果它没有回答“字符”,那么我们在 VisualWorks 中没有找到正确的制表符名称。
编辑2:
我不知道在 Visual Works 中将字符转换为字符串的捷径,所以这里有一个无论如何都应该有效的解决方案。asString
无论如何,这就是全部:
由于您可能想要多次使用它,您可以将其保存为字符串,
tabString := String with: Tab.
info := stringOne, tabString, stringTwo
使用宏扩展的最短时间:
info := '<1s><T><2s>' expandMacrosWith: one with: two
基于 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.