【发布时间】:2012-10-13 01:06:17
【问题描述】:
以下程序从名为tes.txt 的文件中读取文本,并将纯英文字符串与整个文件中相同的乌尔都语字符串分开。它作为每个英语单词之后的印记。
该文件如下所示:(乌尔都语字符串跟随英文字符串)
سٹیمپ ختم ہو جاتی ہے
suhail
سٹیمپ ختم ہو جاتی ہے
gupta
سٹیمپ ختم ہو جاتی ہے
ghazal
سٹیمپ ختم ہو جاتی ہے
在使用 windows 时,我编译了以下程序:
import java.io.*;
class checker {
public static void main(String args[]) {
try {
File f = new File("C:/Users/user/Desktop/tes.txt");
FileReader reader = new FileReader(f);
char buffer[] = new char[1024];
String text = "";
while( reader.read(buffer) > 0 ) {
text += buffer.toString();
}
String splits[] = text.split("سٹیمپ ختم ہو جاتی ہے");
for(int i=0;i<splits.length;i++) {
System.out.println(splits[i]);
}
} catch(Exception exc) {
exc.printStackTrace();
}
}
}
作为javac -encoding UTF-8 checker.java。但是当我运行这个程序时,我得到的输出是[C@19b49e6。为什么是这样 ?它也只打印数组中的一个字符串。我还检查了缓冲区数组的长度,结果是一个。为什么是一个(文件中有多个字符串在将其与正则表达式分离后会进入缓冲区)?我哪里做错了?
【问题讨论】:
-
一方面,您不想调用
buffer.toString(),而是使用缓冲区的内容创建一个新字符串——如果有记忆的话,类似于new String( buffer, charset )。可能还有其他问题 - 我稍后会尝试查看。
标签: java string encoding utf-8