我有一个最终字符串acceptedList,它包含昏迷分隔的值。
final String acceptedList = "ABC, HIJ/LMN, PQR1, XYZ";
另一个动态字符串receivedList也是csv,作为我的函数的输入。
String receivedList = "ABC, PQR1";
如果receivedList中的值与acceptedRist中的值匹配(按任何顺序(,它应该返回一条成功消息。
成功场景示例:
receivedList = "ABC";
receivedList = "HIJ/LMN, ABC";
receivedList = "XYZ, PQR1, ABC";
故障场景示例:
receivedList = "ABC, UNKNOWN";
receivedList = "UNKNOWN";
receivedList = "HIJ-LMN";
我已经实现了以下代码,它运行良好。有没有更好的方法来实现这一点?
public class Driver {
final static String acceptedList = "ABC, HIJ/LMN, PQR1, XYZ";
public static void main(String[] args) {
String receivedList = "ABC, PQR1";
System.out.println(checkValues(receivedList));
}
private static String checkValues(String receivedList) {
List<String> acceptedListArray = Arrays.asList(acceptedList.split(", "));
String[] receivedArray = receivedList.split(", ");
for (String string : receivedArray) {
if (!acceptedListArray.contains(string)) {
return "Error!";
}
}
return "Success!";
}
}
输出
Success!
Set#containsAll
我建议您将值存储在集合中,以避免再次处理重复的值,然后使用Set#containsAll
检查receivedList
中的所有值是否都存在于acceptedList
中。
演示:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Driver {
final static String acceptedList = "ABC, HIJ/LMN, PQR1, XYZ";
public static void main(String[] args) {
String receivedList = "ABC, PQR1";
System.out.println(checkValues(receivedList));
receivedList = "ABC, UNKNOWN";
System.out.println(checkValues(receivedList));
}
private static String checkValues(String receivedList) {
Set<String> acceptedListSet = new HashSet<>(Arrays.asList(acceptedList.split(", ")));
Set<String> receeivedListSet = new HashSet<>(Arrays.asList(receivedList.split(", ")));
return acceptedListSet.containsAll(receeivedListSet) ? "Success!" : "Failure!";
}
}
输出:
Success!
Failure!
您可以使用String#split
将两个CSV输入转换为数组。然后,将它们转换为列表,并使用List#containsAll
进行断言:
public class Driver {
final static String acceptedCSV = "ABC, HIJ/LMN, PQR1, XYZ";
public static void main(String[] args) {
String receivedCSV = "ABC, PQR1";
System.out.println(receivedCSV + " => " + checkValues(receivedCSV));
receivedCSV = "ABC, DEF";
System.out.println(receivedCSV + " => " + checkValues(receivedCSV));
}
private static String checkValues(String receivedCSV) {
List<String> acceptedList = Arrays.asList(acceptedCSV.split("\s*,\s*"));
List<String> receivedList = Arrays.asList(receivedCSV.split("\s*,\s*"));
return acceptedList.containsAll(receivedList) ? "Success!" : "Error!";
}
}
此打印:
ABC, PQR1 => Success!
ABC, DEF => Error!