如何比较每个位置的两个数组字符串

时间:2014-09-09 19:42:25

标签: java android arrays compare

我是java新手,我有这个问题;我正在使用android发送请求的web服务,我得到一个格式如下字符串的答案:1-0,2-0,3-0,4-0,5-0,6-0,7-0,8-0,12-0,13-0其中“ - ”之前的数字表示我的按钮数和“ - ”之后的数字表示按钮状态。我将这个字符串拆分成这样的数组:

String  buttons = "1-0,2-0,3-0,4-0,5-0,6-0,7-0,8-0,13-0,14-0";
String[] totalButtons = buttons.split(",");

然后我发出新请求以获取我的按钮的状态,我得到了这个

String status = "1-0,2-0,3-2,4-0,5-4,6-0,7-4,8-0,9-2,10-1,13-4,14-2";
String[] statusButtons = status.split(",");

按钮的数量将始终相同;在这种情况下10个按钮。 我遇到的问题是如何比较两个数组中的每个元素,如果它们每两秒钟可以更改一次状态,并且我收到的按钮比第一次多,我必须用新值更改它们的状态。例如,数组1的第一个元素等于第二个数组的第一个元素,所以没有问题,但第一个数组在第二个数组中没有两个元素,在这种情况下9-2,10-1所以它们应该是删除。最终结果应该是这样的

String  buttons =     "1-0,2-0,3-0,4-0,5-0,6-0,7-0,8-0,13-0,14-0";
String status =       "1-0,2-0,3-2,4-0,5-4,6-0,7-4,8-0,9-2,10-1,13-4,14-2";
String finalButtons = "1-0,2-0,3-2,4-0,5-4,6-0,7-4,8-0,13-4,14-2";

3 个答案:

答案 0 :(得分:1)

这是一个让你入门的想法;

Map<String,String> buttonStatus = new HashMap<String,String>();

for (String button : totalButtons) {
    String parts[] = button.split("-");
    buttonStatus.put(parts[0], parts[1]);
}

for (String button : statusButtons) {
    String parts[] = button.split("-");
    if (buttonStatus.containsKey(parts[0])) {
        buttonStatus.put(parts[0], parts[1]);
    }
    // Java 8 has a "replace" method that will change the value only if the key
    // already exists; unfortunately, Android doesn't support it
}

结果将是一张地图,其密钥取自原始totalButtons,其值将从statusButtons中获取(如果存在)。您可以浏览Map中的键和值以获得结果,但它们不会按顺序排列;如果您希望它们与totalButtons的顺序相同,请再次浏览totalButtons并使用buttonStatus.get获取每个值。

Map的javadoc为here

答案 1 :(得分:0)

我会再次拆分每一个,然后比较这些值。

例如:

String[] doubleSplit = totalButtons[index].split("-"); // "1-0" -> {"1", "0"}

答案 2 :(得分:0)

import java.util.HashMap;
import java.util.Map;

/**
 * @author Davide
 */
public class test {
    static Map map;

    public static void main(String[] args) {
        // init value
        String buttons = "1-0,2-0,3-0,4-0,5-4,6-0,7-0,8-0,13-0,14-0";
        String[] keys = buttons.split("(-[0-9]*,*)");

        init(keys);

        // new value
        String status = "1-0,2-0,3-2,4-0,5-4,6-0,7-4,8-0,9-2,10-1,13-4,14-2";
        String[] statusButtons = status.split(",");

        update(statusButtons);
        print();
    }

    public static void init(String[] keys) {
        map = new HashMap<Integer, Integer>();
        for (String k : keys) {
            map.put(Integer.valueOf(k), 0);
        }
    }

    public static void update(String[] statusButtons) {
        for (String state : statusButtons) {
            String[] split = state.split("-");
            int k = Integer.valueOf(split[0]);
            int v = Integer.valueOf(split[1]);
            if (map.containsKey(k)) {
                map.put(k, v);
            }
        }
    }

    public static void print() {
        String out = "";
        for (Object k : map.keySet()) {
            out += k + "-" + map.get(k) + ",";
        }
        System.out.println(out.substring(0, out.length() - 1));
    }
}