与另一个字符串相比,如何解析字符串?

时间:2014-10-07 12:02:11

标签: java string parsing compare match

在Java中,我想从一个逗号分隔的字符串中提取差异,与另一个字符串进行比较。

e.g

我想从以下字符串中提取差异: 1,你好,火,狗,绿

我要比较的字符串: 1,你好,水,狗,黄色

因此该函数的结果会给我一个[ 3,fire ]和[ 5,green ]的arraylist,因为这些项目不同于第二个字符串,它们是' water'并且'黄色'。数字是检测到的每个项目的索引位置。其他项目匹配,不予考虑。

3 个答案:

答案 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; }

要注意索引越界异常.. !!