有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当我期望使用英语字符串时,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。为什么是一个(文件中有多个字符串在与正则表达式分离后将进入缓冲区)?我哪里出错了


共 (3) 个答案

  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. # 2 楼答案

    字符缓冲区[]未正确添加到字符串中,请更改此行

         text += new String(buffer);
    

    *抱歉我之前的回答我有点困

  3. # 3 楼答案

    您没有正确读取文件内容,以下是更好的读取文件内容的方法:

     String text = "";
     int readcount=0;
     while((readcount =  reader.read(buffer)) != -1 ) {
        text += new String(buffer, 0, readcount);
     }
    
     String[] splits = text.split("سٹیمپ ختم ہو جاتی ہے");