문제에는 몇 가지 문제가 있습니다. 구문 분석 된 값과 키에는 쉼표가 포함될 수 있고 키와 값은 쉼표로 구분되므로 쉼표 사이의 숫자가 값이나 키에 속하는지 만 추측 할 수 있습니다. 또한 키와 값의 유형을 지정하지 않았습니다.
다음 코드는 입력 문자열이 올바르게 형식화되지 않은 경우 예외를 발생시키지 않으며 잘못된 입력을 제공하면 영구 실행될 수 있습니다. 또한 첫 번째 쉼표를 구분 기호으로 해석합니다. 나는 키가 가정 값은 직접 구문 분석 할 수 String 형,의 모두 :
HashMap<String, String> result = new HashMap<>(6);
String text = "[(age,120), (eyes,5), (feet, 8)]";
int index = text.indexOf("[") + 1; // now one index after '['
while (index < text.length() && text.charAt(index) != '(')
index++; //skip until we hit the start: '('
//this loop runs once for every pair (key, value). In this example three times
main: while(index < text.length()) {
index++; //skip '('
// parse the key, until a comma appears
int keyStart = index;
while (text.charAt(index) != ',') index++;
int keyEnd = index;
index++; //skip ','
// parse the value, until a closing bracket appears
int valueStart = index;
while (text.charAt(index) != ')') index++;
int valueEnd = index;
// extract the actual Strings, using the parsed indices start & end
String key = text.substring(keyStart, keyEnd).trim();
String value = text.substring(valueStart, valueEnd).trim();
result.put(key, value);
// parse to the next pair (x,y), or exit
while (text.charAt(index) != '(') {
if(text.charAt(index) == ']')
break main; // finish parsing, break main loop
index++;
}
}
System.out.println(result); // output = {feet=8, eyes=5, age=120}
무관 노트 :이 코드는 효율적으로 실행됩니다. String.substring, String.indexOf 또는 심지어 정규 표현식, 패턴 또는 이와 유사한 것을 사용하는 코드는 동일한 문자를 여러 번 처리 할 수 있습니다. 이 코드에서 모든 문자는 한 번만 exaclty로 구문 분석되며 모든 관련 문자 (값 및 키)는 한 번만 복사됩니다.
구문은 비교적 자유 롭습니다. 두 쌍 사이의 텍스트와 같은 관련성이없는 기호 또는 공백은 모두 무시됩니다.. 구문은 다음과 같다 :
파싱한다
[
및
]
간의 페어 (0을 포함) 번호
모든 쌍은 괄호로 묶인해야; 키와 값은 쉼표로 구분해야합니다. 첫 번째 쉼표가 사용됩니다. 예 : (name , value)
이름 쌍의 쉼표를 제외하고 )
및 ]
을 포함하여 모든 기호를 포함 할 수 있습니다.쌍의 값은 닫는 괄호를 제외한 ]
및 (
을 포함하여 모든 기호를 포함 할 수 있습니다. 이름 및 값 주변의 공백이 제거됩니다. 예 : (my name , val,ue)
-> name = my name
및 값 = val,ue
. String.trim()을 참조하십시오.
[(,)]
또한 유효한 구문이며 HashMap에서 빈 문자열이됩니다.
더 명확하게 질문을 넣으려면 [(key1, value1), (key2, value2), (key3, value3)] 문자열에서 value1, value2를 검색하는 방법 – user2593186
더 분명한? 코드 예제를 알려주십시오. –
죄송합니다, 질문은 위의 키 - 값 쌍이 대괄호 안에있을 때 값을 검색하는 방법입니다 – user2593186