|
@@ -26,7 +26,7 @@ public class QuestionOptionHelper {
|
|
|
return String.valueOf(c);
|
|
|
}
|
|
|
|
|
|
- return null;
|
|
|
+ return "";
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -37,6 +37,7 @@ public class QuestionOptionHelper {
|
|
|
|
|
|
if (StringUtils.isNotEmpty(letters)) {
|
|
|
char[] chars = letters.toCharArray();
|
|
|
+
|
|
|
for (char c : chars) {
|
|
|
if (String.valueOf(c).matches("[A-Z]")) {
|
|
|
// 只处理A-Z之间的大写字母
|
|
@@ -54,11 +55,11 @@ public class QuestionOptionHelper {
|
|
|
* 为了兼容旧数据需要转换为Json数字数组,如:0123456789 --> [0,1,2,3,4,5,6,7,8,9]
|
|
|
*/
|
|
|
public static List<Integer> parseNumberOptions(String numberStr) {
|
|
|
- List<Integer> numbers = new ArrayList<>();
|
|
|
if (StringUtils.isEmpty(numberStr)) {
|
|
|
- return numbers;
|
|
|
+ return new ArrayList<>();
|
|
|
}
|
|
|
|
|
|
+ List<Integer> numbers = new ArrayList<>();
|
|
|
if (numberStr.startsWith("[") && numberStr.endsWith("]")) {
|
|
|
// 已经是Json数字数组的新格式数据,直接解析并返回
|
|
|
String[] values = numberStr.replace("[", "").replace("]", "").split(",");
|
|
@@ -71,6 +72,7 @@ public class QuestionOptionHelper {
|
|
|
try {
|
|
|
numbers.add(Integer.parseInt(x.trim()));
|
|
|
} catch (NumberFormatException e) {
|
|
|
+ // 忽略其它字符
|
|
|
log.warn("{}不可转换为数字!", x);
|
|
|
}
|
|
|
}
|
|
@@ -84,26 +86,28 @@ public class QuestionOptionHelper {
|
|
|
if (String.valueOf(c).matches("[0-9]")) {
|
|
|
// 只处理0-9之间的数字
|
|
|
numbers.add(c - 48);
|
|
|
- } else {
|
|
|
- // 忽略其它字符
|
|
|
}
|
|
|
+ // 忽略其它字符
|
|
|
}
|
|
|
|
|
|
return numbers;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 解析数字,返回JSON数字数组的字符串
|
|
|
+ * 解析数字并排序,返回JSON数字数组的字符串
|
|
|
*/
|
|
|
public static String parseNumbers(String numberStr) {
|
|
|
List<Integer> numbers = parseNumberOptions(numberStr);
|
|
|
- // 从小到大排序
|
|
|
- Collections.sort(numbers);
|
|
|
+ if (CollectionUtils.isNotEmpty(numbers)) {
|
|
|
+ // 从小到大排序
|
|
|
+ Collections.sort(numbers);
|
|
|
+ }
|
|
|
return "[" + StringUtils.join(numbers, ",") + "]";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 比较正确答案和学生作答答案是否一致(兼容新、旧格式数据)
|
|
|
+ * 适用场景:单选题、多选题、判断题
|
|
|
*/
|
|
|
public static boolean isEqualAnswer(String correctAnswer, String studentAnswer) {
|
|
|
if (StringUtils.isEmpty(correctAnswer) || StringUtils.isEmpty(studentAnswer)) {
|
|
@@ -116,12 +120,17 @@ public class QuestionOptionHelper {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- // 兼容判断题情况(true,false)
|
|
|
+ // 兼容判断题情况(true or false)
|
|
|
correctAnswer = correctAnswer.replace("true", "1").replace("false", "0");
|
|
|
studentAnswer = studentAnswer.replace("true", "1").replace("false", "0");
|
|
|
|
|
|
List<Integer> correctAnswers = parseNumberOptions(correctAnswer);
|
|
|
List<Integer> studentAnswers = parseNumberOptions(studentAnswer);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(correctAnswers) || CollectionUtils.isEmpty(studentAnswers)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
return CollectionUtils.isEqualCollection(correctAnswers, studentAnswers);
|
|
|
}
|
|
|
|
|
@@ -135,6 +144,7 @@ public class QuestionOptionHelper {
|
|
|
System.out.println(isEqualAnswer("123", "[321]"));//false
|
|
|
System.out.println(isEqualAnswer("true", "true"));
|
|
|
System.out.println(isEqualAnswer("true", "false"));
|
|
|
+ System.out.println(isEqualAnswer("xxx", "x,xx"));//false
|
|
|
}*/
|
|
|
|
|
|
}
|