当我期望使用英语字符串时,java得到了一个奇怪的输出
下面的程序从名为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
。为什么会这样?而且它只打印数组中的一个字符串。我还检查了缓冲区数组的长度,结果是1。为什么是一个(文件中有多个字符串在与正则表达式分离后将进入缓冲区)?我哪里出错了
# 1 楼答案
您的错误是假设数组的toString为您提供了其元素的文本表示。事实并非如此。你想要java。util。数组。toString(数组)用于此
另外,假设文件中有5个字符;将5个字符读入1024个字符的缓冲区,并将所有1024个字符添加到字符串中。这是1019个空字符。我建议使用BufferedReader。readLine()将文件读入字符串,甚至是番石榴的文件。toString(文件文件,字符串字符集)-http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/Files.html#toString(java.io.File,%20java.nio.charset.Charset
然而,为了解释如何修复现有的字符,只需要存储读取的字符数,并且只使用数组中的那么多字符。如果这还不够清楚,让我知道,我会写一个代码示例
# 2 楼答案
字符缓冲区[]未正确添加到字符串中,请更改此行
*抱歉我之前的回答我有点困
# 3 楼答案
您没有正确读取文件内容,以下是更好的读取文件内容的方法: