我是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";
答案 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));
}
}