Java 如何从文本中随机选择一个单词,并在选择时反转相同的单词

Java 如何从文本中随机选择一个单词,并在选择时反转相同的单词,java,Java,我想从文本文件中选择一个单词。打印该单词,并将同一单词反向打印。当我运行代码时,我有下面的输出。我只需要把同一个字倒过来打印。但是当我在主函数中调用reverse方法时,什么也不会打印 下面是我的代码: import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Collections; import java.util.Random; import

我想从文本文件中选择一个单词。打印该单词,并将同一单词反向打印。当我运行代码时,我有下面的输出。我只需要把同一个字倒过来打印。但是当我在主函数中调用reverse方法时,什么也不会打印

下面是我的代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.Scanner;

public class SortingInput {

    private static Scanner file;
    private static ArrayList<String> words = new ArrayList<String>();


    private static void openFile(){

        try {
            file = new Scanner(new File("word-file.txt"));

        } catch (FileNotFoundException e) {
            System.out.println("File Not Found.");
        } catch (Exception e) {
            e.printStackTrace(); 
            System.out.println("IOEXCEPION");
        }   
    }

    public void closeFile(){
        file.close();
    }

    private static void randomFile() {

        Random r = new Random();

        while(file.hasNextLine()){
            words.add(file.nextLine());
        }

        String randomWord = words.get(r.nextInt(words.size()));
        Collections.shuffle(words);
        System.out.println(randomWord);
    }

    private static void reverse(ArrayList<String> array){

        for(int i = 0; i < array.size(); i++) {
            String element = array.get(i);
            String setter = " ";

            for(int k = 0; k < element.length(); k++){
                char temp = element.charAt(element.length()- k - 1);
                setter += temp; 
            }

            array.set(i, setter);
        }
    }

    public static void main(String[] args) {

        openFile();
        System.out.print("Before: ");
        randomFile();

        System.out.print("After: ");
        reverse(words);**
    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Random;
导入java.util.Scanner;
公共类排序输入{
专用静态扫描文件;
私有静态ArrayList words=新ArrayList();
私有静态void openFile(){
试一试{
文件=新扫描仪(新文件(“word file.txt”);
}catch(filenotfounde异常){
System.out.println(“未找到文件”);
}捕获(例外e){
e、 printStackTrace();
System.out.println(“IOEXCEPION”);
}   
}
公共文件(){
file.close();
}
私有静态文件(){
随机r=新随机();
while(file.hasNextLine()){
words.add(file.nextLine());
}
String randomWord=words.get(r.nextInt(words.size());
集合。洗牌(单词);
System.out.println(随机字);
}
专用静态无效反转(ArrayList数组){
对于(int i=0;i
如果使用from和StringBuilder,代码会短得多。例如:

public static void main( String[] args )
    {
        File file = new File( "word-file.txt" );
        try
        {
            List<String> lines = FileUtils.readLines( file );
            Random random=new Random();
            String before=lines.get(random.nextInt(lines.size()));
            System.out.println("Before:"+before);
            System.out.println("After:"+ new StringBuilder(before).reverse());
        }
        catch( IOException e )
        {
            e.printStackTrace();
        }

    }
publicstaticvoidmain(字符串[]args)
{
File File=新文件(“word File.txt”);
尝试
{
列表行=FileUtils.readLines(文件);
随机=新随机();
字符串before=lines.get(random.nextInt(lines.size());
System.out.println(“Before:+Before”);
System.out.println(“之后:+新StringBuilder(之前).reverse());
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}

您不需要反转字符串的整个
数组列表。

移除
private static void reverse(ArrayList array)
方法,使
randomFile()
返回一个将被反转的
字符串
StringBuffer
StringBuilder
类具有用于反转字符串的
reverse()
方法

我还建议您将
randomFile()
重命名为
randomWord()
,因为您将单词而不是文件随机化

randomWord():

private static String randomWord() {

    Random r = new Random();

    while(file.hasNextLine()){
        words.add(file.nextLine());
    }

    String randomWord = words.get(r.nextInt(words.size()));
    // Collections.shuffle(words); -> this is not needed since randomWord is already produced.

    return randomWord;
}
public static void main(String[] args) {


    openFile();
    String random = randomWord();
    System.out.println("Before: " + random);
    System.out.print("After: " + new StringBuilder(random).reverse() );

}
main():

private static String randomWord() {

    Random r = new Random();

    while(file.hasNextLine()){
        words.add(file.nextLine());
    }

    String randomWord = words.get(r.nextInt(words.size()));
    // Collections.shuffle(words); -> this is not needed since randomWord is already produced.

    return randomWord;
}
public static void main(String[] args) {


    openFile();
    String random = randomWord();
    System.out.println("Before: " + random);
    System.out.print("After: " + new StringBuilder(random).reverse() );

}
样本输出:

Before: hallow
After: wollah

当然,您需要一种将
randomWord
作为参数的方法,然后将其反转并打印出来。为什么要反转整个数组?您是使用这种方法来反转
字符串
,因为它是赋值所必需的,还是可以随意使用任何您想要的核心Java方法?如果答案是后者,请查看下面我的解决方案。它不会打印,因为您没有可在方法
reverse
中打印的代码。只需在
reverse
方法的末尾添加
System.out.println()
。谢谢,我会试试这个@ScaryWombatThank you我会试试这个@timbiegeleisen为什么你要收集
Collections.shuffle(单词)?我有一个文本文件,我希望文本中的单词基本上可以洗牌。因此,当您运行该程序时,将显示另一个单词,这就是为什么会出现Collections.shuffle()@可怕的蝙蝠……我现在真的让这个程序开始工作了,因为雷梅尔弗朗西斯科也展示了一种更简单的方法。也谢谢你的帮助。@ScaryWombat
Collections.shuffle(单词)
是asker原始代码的一部分。谢谢你指出这一点。我现在意识到,顺便说一句,这是不必要的。