我不是一位经验丰富的Java程序员,我正在尝试将一些文本写入文件,然后使用Scanner读取它。我知道有很多方法可以做到这一点,但我想用分隔符写记录到文件,然后阅读碎片。
问题很小。当我查看输出时,看不到某些打印(如下所示)。我的意思是输出中的粗体线只写为“扫描仪”。如果有人能回答为什么“ String:”没有在那里看到,我将不胜感激。 (请回答我的要求)
我无法理解这是一个简单的打印问题还是“\ r \ n”的行结束问题。
以下是代码:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Tmp {
public static void main(String args[]) throws IOException {
int i;
boolean b;
String str;
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing|10|true|two|false\r\n");
fout.write("Scanner|12|one|true|");
fout.close();
FileReader fin = new FileReader("Test.txt");
Scanner src = new Scanner(fin).useDelimiter("[|\\*]");
while (src.hasNext()) {
if (src.hasNextInt()) {
i = src.nextInt();
System.out.println("int: " + i);
} else if (src.hasNextBoolean()) {
b = src.nextBoolean();
System.out.println("boolean: " + b);
} else {
str = src.next();
System.out.println("String: " + str);
}
}
fin.close();
}
}
这是输出:
public class Tmp {
public static void main(String args[]) throws IOException {
int i;
boolean b;
String str;
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing|10|true|two|false\r\n");
fout.write("Scanner|12|one|true|");
fout.close();
FileReader fin = new FileReader("Test.txt");
Scanner src = new Scanner(fin).useDelimiter("[|\\*]");
while (src.hasNext()) {
if (src.hasNextInt()) {
i = src.nextInt();
System.out.println("int: " + i);
} else if (src.hasNextBoolean()) {
b = src.nextBoolean();
System.out.println("boolean: " + b);
} else {
str = src.next();
System.out.println("String: " + str);
}
}
fin.close();
}
}
答案 0 :(得分:2)
你没有正确设置分隔符; [|\\*]
是一个由2个字符|
,*
组成的字符类。
String s = "hello|world*foo*bar\r\nEUREKA!";
System.out.println(s);
// prints:
// hello|world*foo*bar
// EUREKA!
Scanner sc;
sc = new Scanner(s).useDelimiter("[|\\*]");
while (sc.hasNext()) {
System.out.print("[" + sc.next() + "]");
}
// prints:
// [hello][world][foo][bar
// EUREKA!]
System.out.println();
sc = new Scanner(s).useDelimiter("\r?\n|\r|\\|");
while (sc.hasNext()) {
System.out.print("[" + sc.next() + "]");
}
// prints:
// [hello][world*foo*bar][EUREKA!]
您似乎发现"[|\\n]"
“有效”,但这实际上会在某些令牌的末尾留下尾随\r
。
巧合的是,你应该查找PrintWriter
;它有println
个使用系统属性line.separator
的方法。它基本上是System.out
是-a。
PrintWriter fout = new PrintWriter(new File("test.txt"));
fout.println("Testing|10|true|two|false");
答案 1 :(得分:0)
问题是您正在写出字符串“String:”,然后写出控制字符\ r \ n或回车符,然后写出内容。
以下版本应该对您有所帮助:
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing|10|true|two|false\n");
fout.write("Scanner|12|one|true|");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin).useDelimiter("[|\n]");
要真正了解我在谈论的内容,您应该更改原始程序,以便打印代码如下所示:
} else {
str = src.next().trim();
str = str.replace('\n', '_');
str = str.replace('\r', '_');
System.out.println("String: " + str);
}
你应该看到输出:
String:false__Scanner