나는의 형식에 문자열 아래가 key1=value1, key2=value2
나는지도에서로드해야하는 (Map<String, String>)
등 key=value
내가 쉼표에 분할해야하므로 ,
다음로드 cossn
키와 같은 0
값.
String payload = "cossn=0, abc=hello/=world, Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
HashMap<String, String> holder = new HashMap();
String[] keyVals = payload.split(", ");
for(String keyVal:keyVals) {
String[] parts = keyVal.split("=",2);
holder.put(parts[0], parts[1]);
}
나는 java.lang.ArrayIndexOutOfBoundsException
이 줄에서 얻고 있으며 값에 여분의 쉼표가 있기 holder.put(parts[0], parts[1]);
때문에이 String의 bcoz가 발생 Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
합니다 KHTML, like Gecko
.
이 문제를 어떻게 해결할 수 있습니까? 일반적으로 아래는지도에로드 한 후 내 키와 값이어야합니다.
Key Value
cossn 0
abc hello/=world
Agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
키에 영숫자 만 포함되어 있다고 말했듯이 다음은 분할을위한 좋은 휴리스틱이 될 것입니다.
payload.split("\\s*,\\s*(?=[a-zA-Z0-9_]+\\s*=|$)");
문자열의 끝이나 영숫자 키, 선택적 공백 및 등호가 뒤에 오는 공백 프레임 쉼표로 분할됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다