我想从Unicode代码点
创建一个测试字符串像这样的东西
count=1;
do{
System.out.println("Please enter passenger " + count +" details:");
passengerName=keyboard.nextLine();
count++;
keyboard.nextLine();
passengerInfo +="\nPassenger "+count+": "+passengerName;
//ticket printout section
System.out.println("Ticket");
System.out.println("======");
System.out.println("Number of Passengers: "+numOfPassengers);
System.out.println(passengerInfo);
}while (count<=numOfPassengers);
}
}
或者
65 asCharacter asString,
66 asCharacter asString,
67 asCharacter asString,
65 asCharacter asString,
769 asCharacter asString
这可行,但
我正在寻找一种将整数值数组转换为类String实例的方法。
String with: 65 asCharacter
with: 66 asCharacter
with: 67 asCharacter
with: 65 asCharacter
with: 769 asCharacter
答案 0 :(得分:8)
很多方式
<强> 1。 #streamContents:强>
如果您正在执行更大的字符串连接/构建,请使用流,因为它更快。如果只是串联几个字符串就会使用更易读的东西。
String streamContents: [ :aStream |
#(65 66 67 65 769) do: [ :each |
aStream nextPut: each asCharacter
]
]
或
String streamContents: [ :aStream |
aStream nextPutAll: (#(65 66 67 65 769) collect: #asCharacter)
]
<强> 2。 #withAll:强>
String withAll: (#(65 66 67 65 769) collect: #asCharacter)
第3。 #collect:as:String
#(65 66 67 65 769) collect: #asCharacter as: String
<强> 4。 #joinUsing:字符
(#(65 66 67 65 769) collect: #asCharacter) joinUsing: ''
注意:
至少在Pharo中,您可以使用[ :each | each selector ]
,也可以只使用#selector
。我发现后者对于简单的事情更具可读性,但这可能是个人偏好。
答案 1 :(得分:4)
使用#withAll:
构造String实例String withAll:
(#(65 66 67 65 769) collect: [:codepoint | codepoint asCharacter])
答案 2 :(得分:1)
这是一个“低级”变体:
codepoints := #(65 66 67 65 769).
string := WideString new: codepoints size.
codepoints withIndexDo: [:cp :i | string wordAt: i put: cp].
^string
答案 3 :(得分:1)
请将以下内容视为非常黑客,无证,不受支持,因而绝对错误的方法!
你会认为你不能轻易混合字符和整数,你可以这样做:
'' asWideString copyReplaceFrom: 1 to: 0 with: (#(65 66 67 65 769) as: WordArray).
实际上,这是通过一个并不真正检查类的原语,而只是因为接收器和参数都是VariableWord类...
出于同样的原因(取决于WriteStream实现 - 让我们说脆弱),这可以起作用:
^'' asWideString writeStream
nextPutAll: (#(65 66 67 65 769) as: WordArray);
contents
同样适用于ByteString和ByteArray。
当然,同样地,让我们不要忘记最复杂的方式,BitBlt:
^((BitBlt toForm: (Form new hackBits: (WideString new: 5)))
sourceForm: (Form new hackBits: (#(65 66 67 65 769) as: WordArray));
combinationRule: Form over;
copyBits;
destForm) bits
我们再次利用WideString的WordArray性质作为Form(位图)位的容器。
希望这个答案不会获得太多选票,但它不配得到它!