在Java中,我想从一个逗号分隔的字符串中提取差异,与另一个字符串进行比较。
e.g
我想从以下字符串中提取差异: 1,你好,火,狗,绿
我要比较的字符串: 1,你好,水,狗,黄色
因此该函数的结果会给我一个[ 3,fire ]和[ 5,green ]的arraylist,因为这些项目不同于第二个字符串,它们是' water'并且'黄色'。数字是检测到的每个项目的索引位置。其他项目匹配,不予考虑。
答案 0 :(得分:1)
首先,您可以创建自己的Pair类(基于Creating a list of pairs in java),不必是模板。
然后做这样的事情:
拆分两个字符串:
List<String> toCompareSplit= Arrays.asList(toCompare.split(","));
List<String> compareWithSplit= Arrays.asList(compareWith.split(","));
迭代列表:
List<Pair> diffList= new ArrayList<Pair>();
for (int i= 0; i < toCompareSplit.size; i++){
if (!toCompareSplit.get(i).equals(compareWithSplit.get(i))){
Pair pair= new Pair(i+1, toCompareSplit.get(i));
diffList.add(pair);
}
}
如果列表的大小不同,则可以运行到最短的列表等。
答案 1 :(得分:0)
var left = "1,hello,fire,dog,green";
var right = "1,hello,water,dog,yellow";
var result = left.Split(',').Zip(right.Split(','), Tuple.Create).Where(x => x.Item1 != x.Item2).ToArray();
使用C#,这将返回不同元素的元组数组。抱歉,我没有编译器,因此可能会出现一些小的语法错误。
答案 2 :(得分:0)
为什么不通过拆分字符串来循环。
public static List<String> compareStrings(String str1, String str2) {
String[] arrStr1 = str1.split(",");
String[] arrStr2 = str2.split(",");
List<String> strList = new ArrayList<String>();
for(int index = 0; index < arrStr1.length; ++index) {
if (!arrStr1[index].equals(arrStr2[index])) {
strList.add("[" + index + "," + arrStr1[index] + "]");
}
}
return strList;
}
要注意索引越界异常.. !!