Java 如何从文本中随机选择一个单词,并在选择时反转相同的单词
我想从文本文件中选择一个单词。打印该单词,并将同一单词反向打印。当我运行代码时,我有下面的输出。我只需要把同一个字倒过来打印。但是当我在主函数中调用reverse方法时,什么也不会打印 下面是我的代码: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
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()@可怕的蝙蝠……我现在真的让这个程序开始工作了,因为雷梅尔弗朗西斯科也展示了一种更简单的方法。也谢谢你的帮助。@ScaryWombatCollections.shuffle(单词)
是asker原始代码的一部分。谢谢你指出这一点。我现在意识到,顺便说一句,这是不必要的。