졍규식을 활용하여 "()" Block 을 추출하는 모듈을 구성해 보았습니다.
매번 구성하고 소스가 어디에 있는지 몰라 다시 구성하는 것을 반복하다 보니,
간단히 메모처럼 적어 놓게 되었습니다.
public static Map<String,String> parseStringBraceBlocks(String str) {
if ( str == null )
return null;
Map<String,String> result = new LinkedHashMap<String,String>();
String regStr = "([(]([^()]+?)[)])";
Pattern pObj = Pattern.compile(regStr, Pattern.MULTILINE);
Matcher mObj = pObj.matcher(str);
String tr = str;
int count = 0;
while ( mObj.find()) {
String keyStr = "@"+(++count)+"@";
String valueStr = mObj.group(2);
result.put(keyStr, valueStr);
tr = tr.substring(0,mObj.start(1))
+ keyStr + tr.substring(mObj.end(1));
mObj = pObj.matcher(tr);
}
result.put("FINAL", tr);
return result;
}
정규식으로 내용을 찾고, 찾은 결과를 치환하여 다시 대상이 되지 않도록 구성 후
재귀 호출처럼 반복하여 결과를 분해한 후 최종적으로 각 단계에 포함된 내용을
Map 에 담아 반환 하는 함수 입니다.
댓글 없음:
댓글 쓰기