【问题标题】:How to compare two arrays string for each position如何比较每个位置的两个数组字符串
【发布时间】:2014-09-09 19:42:25
【问题描述】:

我是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 个按钮。 我遇到的问题是如何比较两个数组的每个元素,如果它们可以每两秒更改一次状态并且我收到的按钮比第一次多,我必须用新值更改它们的状态。例如数组 one 的第一个元素等于第二个数组的第一个元素,所以没有问题,但是在这种情况下,第一个数组在第二个数组中没有两个元素 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";

【问题讨论】:

  • 我尝试使用这样的 for 循环 for(int i = 0; i
  • 你不需要比较。你需要的是Map
  • 感谢您的快速回复,您能给我一个例子吗?

标签: java android arrays compare


【解决方案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

【讨论】:

  • 谢谢,我要试试这个,如果我解决这个问题,我会看到文档,我会发布解决方案感谢大家的想法。
  • 非常感谢,您的解决方案非常棒,也感谢所有帮助我回答问题和时间的人:)
【解决方案2】:

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

例如:

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

【讨论】:

  • 感谢您的时间我已经解决了问题:) 感谢其他人的帮助。 Map buttonStatus = new HashMap(); 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 有一个“replace”方法,只有当键 // 已经存在时才会改变值;不幸的是,Android 不支持它}
【解决方案3】:
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));
    }
}

【讨论】:

  • 我稍后会尝试这段代码,我已经用 ajb 解决方案解决了这个问题,非常感谢你继续帮助其他人:)祝你有美好的一天。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多