我正在使用类似这样的条目解析XML文件:
<control key="test">FF FF FF FF FF FF FF FF</control>
我将它们保存到HashMap
,现在我想将String
转换为int[]
。
但我不知道该怎么办。
我试图用这个解析它:Interger.parseInt(mEntry.getValue().toString(), 16);
,但它失败了,错误为NumberFormatExceptoin: Invalid int: "FF FF FF FF FF FF FF FF"
我搜索了我的问题,但没有找到解决我问题的方法。
有什么可以做到的吗?可能已将其保存在Hashmap
作为int[]
这里是解析代码:
public static Map<String, String> paramListConf1(Context c, int listResID) {
Map<String, String> map = null;
XmlResourceParser parser = c.getResources().getXml(listResID);
String key = "", value = "";
try {
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
} else if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("map")) {
boolean isLinked = parser.getAttributeBooleanValue(
null, "linked", false);
map = isLinked ? new LinkedHashMap<String, String>()
: new HashMap<String, String>();
} else if (parser.getName().equals("windowcontrol")) {
key = parser.getAttributeValue(null, "key");
if (null == key) {
parser.close();
return null;
}
}
} else if (eventType == XmlPullParser.TEXT) {
if (null != key) {
value = parser.getText();
}
} else if (eventType == XmlPullParser.END_TAG) {
if (parser.getName().equals("windowcontrol")) {
map.put(key, value);
key = null;
value = null;
}
}
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return map;
}
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<map linked="false">
<message>
<window>
<control key="test1">FF FF FF FF FF FF FF FF</control >
<control key="test2">EE EE EE EE EE EE EE EE</control >
<control key="test3">DD DD DD DD DD DD DD DD</control >
<control key="test4">00 00 00 00 00 00 00 00</control >
</window>
</message>
</map>
和实施:
public void getXMLResourceInput() {
@SuppressWarnings("rawtypes")
Map keyMap = ResourceUtils.paramListConf1(WindowControlActivity.this, R.xml.config1);
@SuppressWarnings("rawtypes")
Iterator iter = keyMap.entrySet().iterator();
while(iter.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry mEntry = (Map.Entry) iter.next();
Integer.parseInt(mEntry.getValue().toString, 16);
}
}
答案 0 :(得分:3)
我假设您希望字符串“FF FF FF FF FF FF FF FF”作为整数数组而不是单个整数,因为它对于int和-1来说很大。
String hexString = "FF FF FF FF FF FF FF FF";
String[] hexNumbers = hexString.split(" "); //split the string
int[] ints = new int[hexNumbers.length];
for(int i = 0; i<hexNumbers.length; i++) {
ints[i] = Integer.parseInt(hexNumbers[i], 16); //convert from hexString to int
}
for(int i = 0; i<ints.length; i++) {
System.out.println(ints[i]);
}
输出:255 255 255 255 255 255 255 255
NumberFormatException 有两个原因。首先在String和secound中有空格,如果删除它们,它是“FFFFFFFFFFFFFFFF”,大于2 ^ 31-1(正int的最大大小)。
答案 1 :(得分:0)
我认为这是因为FF字节之间的空格。它们应该是FFFFFFFFFFFFFFFF
这将解决它:Integer.parseInt(mEntry.getValue().toString().replaceAll("\\s+",""), 16);