以下程序从名为tes.txt
的文件中读取文本,并将普通英语字符串与整个文件中相同的Urdu字符串分开。它充当每个英文单词后的印章。
该文件如下所示:(Urdu字符串跟随英文字符串)
سٹیمپ ختم ہو جاتی ہے
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
。为什么是这样 ?它还只从数组中打印一个字符串。我还检查了缓冲阵列的长度,它出来了。为什么一个(文件中有多个字符串在从正则表达式中分离后会进入缓冲区)?我在哪里弄错了?
答案 0 :(得分:0)
char buffer []未正确添加到字符串中,请更改此行。
text += new String(buffer);
*对不起我以前的回答我有点困了。
答案 1 :(得分:0)
你的错误是假设数组的toString为你提供了元素的文本表示。它不是。你想要java.util.Arrays.toString(array)。
另外,假设文件中有5个字符;你将5个字符读入1024个字符的缓冲区中,并将所有1024个字符添加到你的字符串中。这是1019个空字符。我建议使用BufferedReader.readLine()代替将文件读入字符串甚至是Guava的Files.toString(文件文件,字符串字符集) - http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/Files.html#toString(java.io.File,%20java.nio.charset.Charset)
但是,要解释如何修复所拥有的内容,只需要存储读取的字符数,并且只使用数组中的那么多字符。如果这还不够清楚,请告诉我,我会写一个代码示例。
答案 2 :(得分:0)
您没有正确阅读文件内容,以下是阅读内容的更好方法:
String text = "";
int readcount=0;
while((readcount = reader.read(buffer)) != -1 ) {
text += new String(buffer, 0, readcount);
}
String[] splits = text.split("سٹیمپ ختم ہو جاتی ہے");