글
javascript 배열 java 리스트 변환
J/Java
2015. 6. 3. 23:40
자바스크립트 [1,2,3,[1,2,3],[1,2,3],[[[1]]]] 이런 문자열을 리스트로 바꾸고 싶은 경우가 발생한다. 이때 아래 예시 처럼 processBracket 처리 후, toList로 변환하면 된다.
package demo; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Stack; import org.junit.Test; public class DemoApplicationTests {
@Test public void test1() { // javascript 배열 String str = "[1,[2,[1],1]]"; // 대각선 depth 위치 파악 배열 int[] strBracket = new int[str.length()]; procBracket(str, strBracket); List list = (List) toList(str, strBracket, 0, str.length() - 1); printList(list, 0); } // depth 0, 1, 2, 3, 4 .... // array [] [] [] [] public Object toList(String str, int[] strBracket, int sIdx, int lIdx) { List res = new ArrayList(); boolean isFirst = true; int cIdx = sIdx; for (;;) { int listIdx = str.indexOf('[', cIdx); int commaIdx = str.indexOf(',', cIdx + 1); // depth가 증가하는지 여부를 파악 if (listIdx != -1 && commaIdx != -1 && listIdx < commaIdx) cIdx = listIdx; else if (listIdx != -1 && commaIdx == -1) cIdx = listIdx; // 대각선이 있을 경우 depth를 증가시켜 해당 구역에 대한 toList를 구한다. if (str.charAt(cIdx) == '[') { int nextIdx = strBracket[cIdx]; // System.out.println((cIdx + 1) + " - " + (nextIdx - 1)); res.add(toList(str, strBracket, cIdx + 1, nextIdx - 1)); cIdx = nextIdx; if (isFirst) isFirst = false; } else if (isFirst || str.charAt(cIdx) == ',') { // 처음 일 경우 ,가 맨 앞에 존재하지 않아 예외처리로 따로 -1을 더한다. if (isFirst) cIdx -= 1; int nextIdx = str.indexOf(',', cIdx + 1); // 끝에 도달했을 경우 if (nextIdx > lIdx || nextIdx == -1) nextIdx = lIdx + 1; // System.out.println(str.substring(cIdx + 1, nextIdx).trim()); res.add(str.substring(cIdx + 1, nextIdx).trim()); if (isFirst) isFirst = false; cIdx = nextIdx; } // 다음 ,위치로 이동시킨다. int nextIdx = str.indexOf(',', cIdx); // 끝에 도달했을 경우, 끝냄. if (nextIdx > lIdx || nextIdx == -1) break; cIdx = nextIdx; } // System.out.println("finish"); return res; } }
'J > Java' 카테고리의 다른 글
SOLID (0) | 2017.06.12 |
---|---|
자바 유용한 라이브러리 (0) | 2014.12.11 |
Java 내부 분석 (0) | 2014.10.12 |
자바 외부 멤버변수를 내부 클래스 안에서 호출 할 경우, 주의사항 (0) | 2014.10.09 |
jackson generic type 관련 (0) | 2014.08.24 |