在 hadoop 中迭代文本
Iterating Text in hadoop
我正在尝试遍历 Text
并打印其内容。这是我试过的代码:
Text text = new Text();
text.set("Hadoop");
ByteBuffer buf = ByteBuffer.wrap(text.getBytes(),0,text.getLength());
int cp = 0;
while(buf.hasRemaining() && (cp = Text.bytesToCodePoint(buf)) != 1)
System.out.println(Integer.toHexString(cp));
这是给我打印代码点。如何从中打印字符?
编辑
对于输入 "Hadoop",在 while 循环中将 int cp
转换为 char
是可行的。但是,当文本类似于 \u0041\u00DF\u6771\uD801\uDC00
然后使用相同的代码时,我在控制台中打印了 couple of ?
。这有什么具体原因吗?请推荐。
我想最简单的方法就是将 ints
转换为 chars
。像这样:
int[] chars = { 0x41, 0xdf, 0x6671, 0x10400 };
for(int c : chars) {
String out = String.format("%d -> %s", c, (char) c);
System.out.println(out);
}
我的输出是:
65 -> A
223 -> ß
26225 -> 晱
66560 -> Ѐ
我正在尝试遍历 Text
并打印其内容。这是我试过的代码:
Text text = new Text();
text.set("Hadoop");
ByteBuffer buf = ByteBuffer.wrap(text.getBytes(),0,text.getLength());
int cp = 0;
while(buf.hasRemaining() && (cp = Text.bytesToCodePoint(buf)) != 1)
System.out.println(Integer.toHexString(cp));
这是给我打印代码点。如何从中打印字符?
编辑
对于输入 "Hadoop",在 while 循环中将 int cp
转换为 char
是可行的。但是,当文本类似于 \u0041\u00DF\u6771\uD801\uDC00
然后使用相同的代码时,我在控制台中打印了 couple of ?
。这有什么具体原因吗?请推荐。
我想最简单的方法就是将 ints
转换为 chars
。像这样:
int[] chars = { 0x41, 0xdf, 0x6671, 0x10400 };
for(int c : chars) {
String out = String.format("%d -> %s", c, (char) c);
System.out.println(out);
}
我的输出是:
65 -> A
223 -> ß
26225 -> 晱
66560 -> Ѐ