Java 如何将文件中的单词存储到字符串中,并反向打印出来?
所以我需要完全按照它在标题中所说的做,获取一个名为“words.txt”的文本文件,让程序读取它,获取其中的所有单词,并将它们存储到一个数组中。之后,程序需要随机选择一个,并反向打印。我很难让它工作,因为它总是在最后崩溃。以下是我目前得到的信息: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
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);
}
}
}