使用正则表达式":"
拆分字符串。在拆分字符串并使用put()
中的HashMap()
方法映射字符串后,当我尝试获取特定的映射密钥时,它将从字符串中返回带有“:”的所有映射值。
这是我的代码:
public class MyClass {
private HashMap<String,String> map = null;
private String newString;
public MyClass(String newString) {
this.newString = newString;
map = new HashMap<String, String>();
}
public static MyClass ReadEntityRequest(String string) {
MyClass Request = new MyClass(string);
String[] arraystring = Request.string.split("\r\n", 2);
String[] arraystring1 = arraystring[1].replace("\r\n\r\n", "").split("\r\n");
for (int i = 0; i < arraystring1.length; i++){
String[] arraystring2 = arraystring1[i].split(":");
Request.map.put(arraystring2[0], arraystring[1]);
}
return Request;
}
public String getHeaderField(String string) {
String headerField = map.get(string);
if(headerField != null){
return headerField;
}
return null;
}
}
以下是调用获取特定密钥“Content-Length”的方法。
MyClass newRequest = MyClass.ReadEntityRequest(newStream);
int contLengthOffset = Integer.parseInt(newRequest.getHeaderField("Content-Length"));
我想要的结果是只从字符串中获取关键字“Content-Length”。 如有必要,将很乐意提供更多代码。有什么建议?
答案 0 :(得分:1)
您似乎为地图中的所有键添加了相同的值:
Request.map.put(arraystring2[0], arraystring[1]);
尝试:
Request.map.put(arraystring2[0], arraystring2[1]);
答案 1 :(得分:1)
您的代码有一些错误。请参阅以下更改。现在应该可以了。
public static MyClass ReadEntityRequest(String string) {
MyClass Request = new MyClass(string);
String[] arraystring = Request.newString.split("\r\n", 2);
String[] arraystring1 = arraystring[1].replace("\r\n\r\n", "").split("\r\n");
for (int i = 0; i < arraystring1.length; i++){
String[] arraystring2 = arraystring1[i].split(":");
Request.map.put(arraystring2[0], arraystring2[1]);
}
return Request;
}