提问人:h0neybugz 提问时间:3/28/2023 更新时间:3/28/2023 访问量:51
如何写入新的文本文件并保留白色间距?
How to write to a new text file and preserve white spacing?
问:
我正在尝试“拼写检查”给定的文本文件,我的程序会读取给定的文件并引用我的老师给出的字典哈希集。如果它找到字典中没有的单词或被某些字符拆分的单词,它会用<>将该单词括起来。一个条件是我需要保留单词之间的空格,我不知道如何确保程序这样做。
当前代码:
public static void spellCheck(File processingFile, File dictionaryFile) {
try {
HashSet<String> dictionary = new HashSet<>();
FileReader processing = new FileReader(processingFile);
FileReader dictionaryF = new FileReader(dictionaryFile);
PrintWriter outputFile = new PrintWriter("test_spellChecked.txt");
Scanner scnr = new Scanner(dictionaryF);
String word = scnr.nextLine();
while(scnr.hasNext()) {
//dont need to check for double words cus its literally a dictionary
dictionary.add(word);
word = scnr.nextLine();
}
//somehow create a stored text file of the processing text that gets changed based on the dictionary check
scnr = new Scanner(processing);
word = scnr.next();
boolean isCorrect = true;
while(scnr.hasNext()) {
if(word.matches("[a-zA-Z]+")) {
if(!dictionary.contains(word.toLowerCase())) {
outputFile.print("<" + word + ">");
}
else
outputFile.print(word);
}
else {
String[] words = word.split("((?=[^a-zA-Z])|(?<=[^a-zA-Z]))");
for(String splitWord: words) {
if(!dictionary.contains(splitWord.toLowerCase())) {
outputFile.print("<" + splitWord + ">");
}
else
outputFile.print(splitWord);
}
}
word = scnr.next();
}
outputFile.close();
System.out.println("File has been checked.");
}
catch (FileNotFoundException e) {
System.out.println("File not found!");
}
}
我刚刚弄清楚了如何用相同的单词将文件重写到文件中,我不确定如何保留空格。
答:
0赞
Giuk Kim
3/28/2023
#1
while(scnr.hasNext()) {
if(word.matches("[a-zA-Z]+")) {
if(!dictionary.contains(word.toLowerCase())) {
outputFile.print("<" + word + ">");
}
else
outputFile.print(word);
}
else {
String[] words = word.split("((?=[^a-zA-Z])|(?<=[^a-zA-Z]))");
for(String splitWord: words) {
if(!dictionary.contains(splitWord.toLowerCase())) {
outputFile.print("<" + splitWord + ">");
}
else
outputFile.print(splitWord);
}
}
word = scnr.next();
}
这就是删除空间的原因。
word 和 splitWord 不包含空格。
因为你正在阅读scnr.next()
next()
读取文件,直到空格或行更改。
像这样改变,或者outputFile.print(splitWord+" ");
outputFile.format("%s ", splitWord);
将节省空间。
但这不会保存或\n
\t
如果你也想保存,\n
for(String word:words){
if(word.matches("[a-zA-Z]+")) {
if(!dictionary.contains(word.toLowerCase())) {
outputFile.print("<" + word + ">");
}
else
outputFile.print(word);
}
else {
String[] words = word.split("((?=[^a-zA-Z])|(?<=[^a-zA-Z]))");
for(String splitWord: words) {
if(!dictionary.contains(splitWord.toLowerCase())) {
outputFile.print("<" + splitWord + ">");
}
else
outputFile.print(splitWord);
}
}
outputFile.println();
}
nextLine = scnr.nextLine();
words = nextLine.split(" ");
}
0赞
VGR
3/28/2023
#2
问题是这样的:
word = scnr.next();
这会导致扫描程序丢弃所有空格,直到下一个令牌。
要保留文件中的所有内容,不能使用零参数 hasNext() 和 next() 方法。
相反,请使用 hasNext(Pattern) 和 next(Pattern) 方法,以便能够保留每个字符:
Pattern wordPattern = Patter.compile("(\\W*)(\\w+)");
while (scnr.hasNext(wordPattern)) {
scnr.next(wordPattern);
String separator = scnr.match().group(1);
String word = scnr.match().group(2);
outputFile.print(separator);
if (!dictionary.contains(word.toLowerCase())) {
outputFile.print("<" + word + ">");
} else {
outputFile.print(word);
}
}
评论