以下是java.text.CharacterIterator文档的摘录:
这
interface定义了一个用于文本双向迭代的协议.迭代器迭代有界字符序列.[...]方法previous()和next()用于迭代.它们返回DONE[...],表示迭代器已到达序列的末尾.
static final char DONE:迭代器到达文本的结尾或开头时返回的常量.值是\uFFFF,不是任何有效的Unicode字符串中不应出现的"非字符"值.
斜体部分是我无法理解的部分,因为从我的测试来看,它看起来像Java String当然可以包含\uFFFF,并且似乎没有任何问题,除了明显的规定的CharacterIterator遍历习惯因为打破因为假阳性(例如,当它没有真正"完成"时next()返回'\uFFFF' == DONE).
这里有一个片段来说明"问题"(另见ideone.com):
import java.text.*;
public class CharacterIteratorTest {
// this is the prescribed traversal idiom from the documentation
public static void traverseForward(CharacterIterator iter) {
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
System.out.print(c);
}
}
public static void main(String[] args) {
String …Run Code Online (Sandbox Code Playgroud) 免责声明:我知道在99%的情况下,您不应该在串联字符串中"序列化"数据.
你们在众所周知的情况下使用了什么样的字符:
string str = userId +"-"+ userName;
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,我已经回到了| (管道)但是,在某些情况下,用户甚至会输入.那么像non(ALT + 9999)这样的"不可打字"字符怎么样?