Java:查找csv字符串A的值是否为字符串B的模式



我有一个最终字符串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!

最新更新