我正在处理一个非常巧妙的问题挑战,其中涉及从 .txt 文件中读取单词。该程序必须允许读取任何 .txt 文件,因此程序无法预测它将处理哪些单词。
然后,它把这些词变成他们的“Pig Latin”对应词,并将它们写入一个新文件。这个问题还有很多要求,但我只想说,我已经解决了每个部分,保存一个......当打印到新文件时,我无法保持行距。也就是说,如果第 1 行有 5 个单词,然后有一个 break,第 2 行有 3 个单词和一个 break……对于新文件也必须如此。就目前而言,一切正常,但所有转换后的单词都一个接一个地列出。
我有兴趣学习这个,所以如果你们都想在你的答案中表现得害羞,我可以。虽然我已经在这工作了 9 个小时,所以“半腼腆”也会受到重视 :) 请密切注意代码中的“while”语句,这是文件 IO 操作发生的地方。我想知道是否需要使用扫描仪中的 nextLine() 命令,然后从中创建一个字符串……然后从 nextLine() 字符串中创建子字符串,以一次一个地转换单词。子字符串可能是拆分或标记,或其他东西 - 我不清楚这部分和标记尝试给我编译器错误异常“java.util.NoSuchElementException” - 我似乎不理解拆分命令的正确调用。我尝试了类似 String a = scan.nextLine() 的东西,其中“scan”是我的扫描仪变量。然后尝试了 String b = a.split() 不行。无论如何,这是我的代码,看看你是否能弄清楚我错过了什么。
这是代码,非常感谢您提前Java神......
import java.util.*;
import javax.swing.*;
import java.io.*;
import java.text.*;
public class PigLatinTranslator
{
static final String ay = "ay"; // "ay" is added to the end of every word in pig latin
public static void main(String [] args) throws IOException
{
File nonPiggedFile = new File(...);
String nonPiggedFileName = nonPiggedFile.getName();
Scanner scan = new Scanner(nonPiggedFile);
nonPiggedFileName = ...;
File pigLatinFile = new File(nonPiggedFileName + "-pigLatin.txt"); //references a file that may or may not exist yet
pigLatinFile.createNewFile();
FileWriter newPigLatinFile = new FileWriter(nonPiggedFileName + "-pigLatin.txt", true);
PrintWriter PrintToPLF = new PrintWriter(newPigLatinFile);
while (scan.hasNext())
{
boolean next;
while (next = scan.hasNext())
{
String nonPig = scan.next();
nonPig = nonPig.toLowerCase();
StringBuilder PigLatWord = new StringBuilder(nonPig);
PigLatWord.insert(nonPig.length(), nonPig.charAt(0) );
PigLatWord.insert(nonPig.length() + 1, ay);
PigLatWord.deleteCharAt(0);
String plw = PigLatWord.toString();
if (plw.contains("!") )
{
plw = plw.replace("!", "") + "!";
}
if (plw.contains(".") )
{
plw = plw.replace(".", "") + ".";
}
if (plw.contains("?") )
{
plw = plw.replace("?", "") + "?";
}
PrintToPLF.print(plw + " ");
}
PrintToPLF.close();
}
}
}