2012-04-13 2 views
1

문자열을 구문 분석하려고하지만 구문 분석 방법이 잘 모르겠습니다. 단순한 쉼표 또는 이와 유사한 구문이 아니기 때문입니다. 내가 가진 문자열이 유사합니다따옴표가있는 Java 구문 분석 문자열

String s = "[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]"; 

문자열이 jsonarray에서오고 그래서 형식은 그것이 무엇인지,하지만 내 목표는 목록에이 구문을 분석하는 이유. 그래서 142.5,106.1은 한 점의 x, y 좌표입니다. 누구든지 이것에 대해 올바른 방향으로 나를 가리키고 있습니까? 감사.

+1

같은 데이터가 포함됩니다

//(being s your example's String) String[] coordinates = s.substring(2, s.length() - 2).split("\",\""); //the two at the beginning and end of the substring is to eliminate braces ([]) and the first and last quotes (") 

좌표를이 문자열처럼 될 것 같지 않습니다 당신이 문자열을 의미합니까 ''[\ "14"와 같은 것입니다. 2.5.106.1 \ "..."우리가 초기화하려고한다면. –

+0

오프 토픽에 대한 죄송합니다. 프로젝트에서 스칼라를 사용할 수 있습니까? 파서는 다음과 같습니다. http://pastebin.com/utAVRLyD – senia

답변

2

당신은 단순히 다음 있고 StringTokenizer를 ("\"[,] ") 사용 수는 시간 (X, Y, X, Y 등)에서 두 값을 읽습니다.

+0

동의 함. 최적으로 GSON을 사용하여 배열이나 List를 자동으로 만들지 만 보유한 문자열이 모두 String이면 StringTokenizer 또는 String.split이 잘 작동합니다. – Shellum

+0

네, 맞습니다. Chson, gson은 매우 훌륭하고 사용하기 쉽습니다 (대부분의 Java 라이브러리의 정신이 아닙니다). 그러나 문제가 매우 단순 해 보였으므로 여기서는 필요하지 않다고 생각했습니다. 물론, bflosabre, 만약 당신이 더 json 구문 분석해야 구글 gson을 고려해야합니다. –

+0

이 문자열은 WCF에서 변경하지 않아도 구현하기가 가장 쉽기 때문에 계속 진행되었습니다. 나는 그것이 이상적인 방법이 아니라는 것을 안다.하지만 지금은 효과가있다. 감사합니다 모두 – bflosabre91

1

을 내가 알고하지 않습니다 나는 너를 잘 이해하지만, 나는 네가 놓친 것은 스페셜 문자가 빠져 나가는 것이라고 생각한다. 내부 따옴표로는 \ "와 같은 백 슬래시를 사용한다.

+0

문자열 ("["142.5,106.1 ","142.5,112.1 ","143.5,119.1 ","144.5,128.1 ","146.5,138.1 ","147.5, 148.1 "]")은 쓰레기입니다. 당신이 실수로 그것을 복사했거나 이것으로 컴파일 오류가 발생해야합니다. 그래서 downvote –

+1

나는 이것이 대답이 아니므로 이것이 코멘트에 있어야한다고 생각하는 이유를 알지 못한다. 아마 그 이유가 투표의 이유가 –

+0

그래,하지만 그게 문제가 있다고 생각 했어. 왜냐하면 당신은 깨진 String을 확실히 파싱 할 수 없기 때문입니다.)하지만 그래, 어쨌든 ...;) –

0

나는 이것이 당신이 요구하는 것과는 완전히 다르다는 것을 알고 있지만, 귀하의 과제에서 올바른 접근법에 대해 의논하여 귀하가 즉시 게시하는 질문에 대답하지 않겠습니다.

당신은 쌍의 JSON 배열을받을 경우, 우리는 (나는 아주 명확한이기 때문에 문자열이 공유 한처럼 보이지 않는, 내가 여기 추측하고있다) 직렬화 된 버전은 그렇게 될 것입니다 가정 할 수 있습니다 :

"[[123, 234], [234, 456],...]" 
당신은 자바 객체로이 문자열을 구문 분석 Gson library 너무 유명을 사용하는 경우

당신이 할 수있는 것과 그것을 간단 :

String json = "[[123.3, 234.5], [234.1, 456.5]]"; 
    Gson gson = new Gson(); 
    double [][] points = gson.fromJson(json, double[][].class); 
    System.out.println(points[1][1]); 

이 출력 : 예상 당신은 구문 분석 처리 할 필요가 없습니다 456.5 것처럼 너 자신.

0

항상 같은 형식으로 변환하면 다음과 같이 변환 할 수 있습니다.

String s ="[\"142.5,106.1\",\"142.5,112.1\"]"; 

      s=s.replace("[", ""); 
      s=s.replace("]", ""); 

      String[] ss=s.split("\""); 
     List list= Arrays.asList(ss); 

list.get(0);=142.5,106.1 // so on ..... 

나는 당신이 필요한 것을 알고 있습니다.

1

내가 여기서 생각해 낸 것은 괄호를 정리하면 더 빨리 만들 수 있습니다. 아마 더 좋고 다른 방법으로 그것을 할 수 있지만, 나는 쉼표를 분리하기 위해 split을 사용한다. 그래서 목록 순서 즉 list.get [0] list.get [1]이다 쌍 등

공공 정적 무효 메인 (문자열 []에 args) {

String s ="[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]"; 
    String[] set= s.split(","); 
    ArrayList<Double> list = new ArrayList<Double>(); 
    for(int i=0; i<set.length;i++){ 
     System.out.println(set[i]); 
     list.add(Double.parseDouble(set[i].replaceAll("\\[", "").replaceAll("\"", "").replaceAll("\\]", ""))); 

    } 
    for(int i=0;i<list.size();i++){ 
     System.out.println(list.get(i)); 
    } 
    } 
0

(A)에 그들을 포함 간단하지만 낮은 효율적인 솔루션은 다음과 같이 문자열 방법을 사용합니다 : 문자열 배열 등 120.1,140.4