我被要求编写一个作业,其中将提示用户输入键和/或值。
到目前为止,这是我的代码:
import java.util.Scanner;
import java.io.*;
class bTree
{
//Fields
static Scanner input = new Scanner(System.in);
static boolean done = false;
public static void main(String args[])throws Exception
{
FileWriter fWriter = new FileWriter("data.txt");
do
{
System.out.print("Enter command: ");
String enter[] = input.nextLine().split(" ", 3);
if(enter[0].toLowerCase().equals("insert"))
{
fWriter.write(enter[1] + "\n" + enter[2] + "\n");
fWriter.flush();
}
else if(enter[0].toLowerCase().equals("select"))
{
FileReader fReader = new FileReader("data.txt");
Scanner fileInput = new Scanner(fReader);
while(fileInput.hasNext() && done == false)
{
if(fileInput.nextLine().equals(enter[1]))
{
System.out.println(fileInput.nextLine());
done = true;
}
else
{
fileInput.nextLine();
}
}
done = false;
}
else if(enter[0].toLowerCase().equals("update"))
{
fWriter.write(enter[2]);
fWriter.flush();
}
else if(enter[0].toLowerCase().equals("exit"))
{
System.exit(0);
}
}
while(true);
}
}
问题:当我打开 data.txt 时,没有空格。因此,如果我在记事本中输入“插入 1001 gen”和“10001 genny”,它将显示为“1001gen10001genny”。有什么建议吗?
最佳答案
问题是 notepad.exe
对行结尾很挑剔,并且有很多可能性。当您将 "\n"
写入 FileWriter
时,它会写入一个字符,即 '\n'
。但记事本需要序列 "\r\n"
。它将单个“\n”
显示为什么都没有。
这是您的代码,稍作修改以解决一些陷阱。
package so7696816;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;
public class Excercise {
public static void main(String args[]) throws Exception {
final Scanner input = new Scanner(System.in);
PrintWriter fWriter = new PrintWriter("data.txt");
while (true) {
System.out.print("Enter command: ");
String enter[] = input.nextLine().split(" ", 3);
final String command = enter[0].toLowerCase(Locale.ROOT);
if (command.equals("insert")) {
fWriter.println(enter[1]);
fWriter.println(enter[2]);
fWriter.flush();
} else if (command.equals("select")) {
FileReader fReader = new FileReader("data.txt");
Scanner fileInput = new Scanner(fReader);
while (fileInput.hasNextLine()) {
String key = fileInput.nextLine();
String value = fileInput.nextLine();
if (key.equals(enter[1])) {
System.out.println(value);
break;
}
}
fReader.close(); // don't leave files open
} else if (command.equals("update")) {
fWriter.write(enter[2]);
fWriter.flush();
} else if (command.equals("exit")) {
return;
} else {
System.err.println("Unknown command: " + command);
}
}
}
}
备注:
- 我使用
PrintWriter
而不是FileWriter
来获得正确的行结尾。 - 对于
select
命令,我在使用后关闭了fReader
。 - 我避免多次输入
enter[0].toLowerCase()
。 - 我使用了
toLowerCase
的正确变体。 - 我添加了对未知命令的错误处理。
- 我重写了
select
命令,使其更加简洁。
关于java - 文件编写器和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696816/