Java 如何将文件中的单词存储到字符串中,并反向打印出来?

Java 如何将文件中的单词存储到字符串中,并反向打印出来?,java,arrays,file,bufferedreader,Java,Arrays,File,Bufferedreader,所以我需要完全按照它在标题中所说的做,获取一个名为“words.txt”的文本文件,让程序读取它,获取其中的所有单词,并将它们存储到一个数组中。之后,程序需要随机选择一个,并反向打印。我很难让它工作,因为它总是在最后崩溃。以下是我目前得到的信息: import java.io.*; import java.util.Random; public class wordReader{ public static void main (String args[]) throws Excepti

所以我需要完全按照它在标题中所说的做,获取一个名为“words.txt”的文本文件,让程序读取它,获取其中的所有单词,并将它们存储到一个数组中。之后,程序需要随机选择一个,并反向打印。我很难让它工作,因为它总是在最后崩溃。以下是我目前得到的信息:

import java.io.*;
import java.util.Random;

public class wordReader{
   public static void main (String args[]) throws Exception{
      BufferedReader br = new BufferedReader(new FileReader("words.txt"));
      String strLine;
      String[] filearray;
      filearray = new String[10];

      while ((strLine = br.hasNextLine())) {
         for (int j = 0; j < filearray.length; j++){
            filearray[j] = br.readLine();
            System.out.println(filearray);
         }
      }
   }
}
import java.io.*;
导入java.util.Random;
公共类读字器{
公共静态void main(字符串args[])引发异常{
BufferedReader br=新的BufferedReader(新文件阅读器(“words.txt”);
弦斯特林;
字符串[]文件数组;
filearray=新字符串[10];
而((strLine=br.hasNextLine()){
对于(int j=0;j

好吧,这就是我现在所拥有的:

import java.io.*;
import java.util.Random;

public class wordReader{
   public static void main (String args[]) throws Exception{
      BufferedReader br = new BufferedReader(new FileReader("words.txt"));
      String strLine;
      String[] filearray;
      filearray = new String[10];
      int j = 0;
      int i = 0;
      Random r = new Random();  
      while(((strLine = br.readLine()) !=null) && j < filearray.length){
         filearray[j++] = strLine;
         int idx = r.nextInt(filearray.length);
      }
   }
}
import java.io.*;
导入java.util.Random;
公共类读字器{
公共静态void main(字符串args[])引发异常{
BufferedReader br=新的BufferedReader(新文件阅读器(“words.txt”);
弦斯特林;
字符串[]文件数组;
filearray=新字符串[10];
int j=0;
int i=0;
随机r=新随机();
而(((strLine=br.readLine())!=null)和&j
尝试使用StringTokenizer读取该行


使用新的
文件
API和StringBuilder可以轻松地反转字符串。它将大大减少您的代码行

public static void main(String[] args) throws Exception {  
    Path path = Paths.get("words.txt");
    Charset charset = StandardCharsets.UTF_8;

    String content = new String(Files.readAllBytes(path), charset);
    String[] words = content.split(",|\.|\s+");

    int randomIndex = new Random().nextInt(words.length);
    String word = words[randomIndex];

    String reversed = StringBuilder(word).reverse().toString();
    System.out.println(reversed);
}

你似乎还没有达到做随机索引选择或行反转的程度,所以我这里不讨论这些东西。StackOverflow上到处都有无数重复项,告诉您如何反转字符串

此时,您会遇到编译错误,因为(除其他外)您试图使用一个不存在的方法(
BufferedReader#hasNextLine()
)。看起来您将可能发现的其他几种方法混在了一起,例如:

int j = 0;
while ((strLine = br.readLine()) != null) { // Set strLine to the next line
    filearray[j++] = strLine; // Add strLine to the array
    // I don't recommend printing the whole array on every pass through the loop...
}
您会注意到,我还取出了内部的
for
循环,因为它只是将列表中的每个元素设置为每次迭代的最新一行。我假设你想用你所有的行填充列表。实际上,您还应该检查
j
是否在可接受的范围内:

while (((strLine = br.readLine()) != null) && j < filearray.length) {...}
但是,这闻起来确实像是家庭作业,所以不管出于什么原因,您可能需要使用
字符串[]



最后,您在问题中所写的内容与您的程序的预期目标之间存在差异。您声称需要每个单词的列表,但看起来更像是试图创建每个行的列表。如果您需要单词而不是行,则需要将每行拆分并将每个标记添加到列表中。

实现此目的的方法很多。这里有一个递归方法,当调用从返回堆栈弹出时打印。这是改编自


你到底犯了什么错误?如果你不告诉我们出了什么问题,我们就帮不了你。这甚至没有编译。这里会弹出很多关于如何反转字符串的问题…
br.hasNextLine()
返回一个
布尔值,你正在将它赋给
字符串
@BelgianMyWaffle该方法甚至不存在,因此它不会崩溃,也不会编译,我如何随机抽取,并反向打印?我需要一个用于反转的for循环,不是吗?不,不需要使用字符串[],我只想让它工作。@Jason有很多方法可以进行行反转和随机选择。一旦你建立了你的行列表,在你的数组中,然后。这将打印文件的全部内容,但反过来,这不是询问者想要的。
while (((strLine = br.readLine()) != null) && j < filearray.length) {...}
List<String> contents = new ArrayList<String>();
while ((strLine = br.readLine()) != null) {
    contents.add(strLine); // Add strLine to the List
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;

public class ReverseLines {

    public static BufferedReader input;
    public static PrintWriter output;

    public static void main(String[] args) throws Exception {

        input = new BufferedReader(new FileReader("/tmp/words.txt"));
        output = new PrintWriter(System.out);
        reverse(input, output);
        input.close();
        output.flush();
        output.close();

    }

    public static void reverse(BufferedReader input, PrintWriter output)
            throws Exception {

        String line = input.readLine();
        if (line != null) {
            reverse(input, output);
            output.println(line);
        }
    }

}