|
|
|
|
@ -4,7 +4,7 @@ import java.nio.file.*;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
public class loadFile {
|
|
|
|
|
// 读取该用户文件夹下已有题目的所有题目文本(每行一个题目或跨行拼接)
|
|
|
|
|
// 读取该用户文件夹下已有题目的所有题目文本
|
|
|
|
|
public static List<String> loadExistingQuestions(String username) {
|
|
|
|
|
List<String> all = new ArrayList<>();
|
|
|
|
|
Path userDir = Paths.get("data", username);
|
|
|
|
|
@ -13,37 +13,37 @@ public class loadFile {
|
|
|
|
|
DirectoryStream<Path> ds = Files.newDirectoryStream(userDir, "*.txt");
|
|
|
|
|
for (Path p : ds) {
|
|
|
|
|
List<String> lines = Files.readAllLines(p, StandardCharsets.UTF_8);
|
|
|
|
|
// 将文件中按题号拆分题目 —— 假设格式 "1. xxx" 开头。我们做简单处理:每个题号开头的新题。
|
|
|
|
|
// 将文件中按题号拆分题目
|
|
|
|
|
StringBuilder cur = new StringBuilder();
|
|
|
|
|
for (String line : lines) {
|
|
|
|
|
//识别题号
|
|
|
|
|
if (line.matches("^\\s*\\d+\\..*")) {
|
|
|
|
|
// 新题开始 -> 保存旧题
|
|
|
|
|
if (cur.length() > 0) {
|
|
|
|
|
// 新题开始 保存旧题
|
|
|
|
|
if (!cur.isEmpty()) {
|
|
|
|
|
all.add(cur.toString().trim());
|
|
|
|
|
}
|
|
|
|
|
cur.setLength(0);
|
|
|
|
|
//去题号
|
|
|
|
|
cur.append(line.replaceFirst("^\\s*\\d+\\.", "").trim());
|
|
|
|
|
} else {
|
|
|
|
|
// 继续当前题(空行也可能出现)
|
|
|
|
|
if (line.trim().isEmpty()) {
|
|
|
|
|
// treat as separator; finish current if non-empty
|
|
|
|
|
if (cur.length() > 0) {
|
|
|
|
|
if (!cur.isEmpty()) {
|
|
|
|
|
all.add(cur.toString().trim());
|
|
|
|
|
cur.setLength(0);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (cur.length() > 0) cur.append(" ");
|
|
|
|
|
if (!cur.isEmpty()) cur.append(" ");
|
|
|
|
|
cur.append(line.trim());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (cur.length() > 0) all.add(cur.toString().trim());
|
|
|
|
|
if (!cur.isEmpty()) all.add(cur.toString().trim());
|
|
|
|
|
}
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
// ignore, return what we have
|
|
|
|
|
}
|
|
|
|
|
// dedupe and return
|
|
|
|
|
// 转链式 去空格 去空字符串 去重 转回list
|
|
|
|
|
return all.stream().map(String::trim).filter(s->!s.isEmpty()).distinct().collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|