2013-08-30 5 views
0

나는 자바의 초보자이며 구분자로 분리 된 데이터를 다른 사람이 나에게 제공하는 작업을해야한다.이 필드에서 이미 원하는 필드를 가져 와서 저장했다. 문자열의 배열로. 그것은 다음과 다소 유사 같습니다
그룹화하고 자바의 벡터/배열에 값 추가

 String [] toseparate =null; 
    Vector <String> myVector = new Vector<String>(); 
    myVector.add (a xyz 12 b efg 13 a pqr 45 c erer 18 a vbv 27 d tag 40 c etc 16....) 
    //These values are derived from a separate array which I've parsed based on delimiters. 
    toseparate = myVector.toArray(new String[myVector.size()]); 

(등)이 50 개 인덱스와 정렬되지 않은 범위에서 길이의 배열이다. 같은 결과가 같아야

a,84,b,13,c,34.... 

그 행 .Apart하는 순서, (B), (C) (즉, 문자열에 해당하는 숫자의 합이다) ... 상관 없다. 다차원 배열 (2D)을 사용하여 수행 할 수 있다고 생각하며 전문적인 조언에 따라 접근 방식을 변경합니다.
도와주세요.
정말 고마워요.

+0

구체적으로 어떤 문제가 있습니까? – Jason

+0

지금까지 시도한 것을 보여주십시오. –

+0

나는이 접근법을 사용하고 접근하는 방법을 알아낼 수 없습니다. – Abisks

답변

0

구분 된 문자열을 구문 분석하는 데 split() 함수를 사용하지 않는 이유는 무엇입니까? 를 살펴 보자

a 12 b 13 a 45 c 18 a 27 d 40 ... 
:

a xyz 12 b efg 13 a pqr 45 c erer 18 a vbv 27 d tag 40 c etc... 

는로 확인 : 모든 데이터가 세 쌍둥이에 같은 관계없이 구문 분석 방법의 http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html

를, 그것은 처음과 마지막 값이 중요 경우에만 보인다

그러면 배열을 3 열로 반복하고 이동하면서 값을 누적 할 수 있다고 가정합니다. 의사 코드에서 :

for(i = 0; i < array.length(); i+=3) { 
    if(!map.containsKey(array[i])) map.put(array[i], array[i+2]); 
    else map.put(array[i], map.get(array[i]) + array[i+2]); 
} 

지도를 들어, 해시 맵 < 문자열을 사용할 수, > INT, 나는 가정한다.

+0

정말 긴 문자열에서이 값을 분리 한 후 이미이 값을 얻었으며 데이터는 실제로 5 그룹에 속하며 새로운 요구 사항에 따라 달라질 수 있습니다. 편의상 삼중 항을 나타 냈습니다. 이미 루프를 사용하고 있지만 자바에 있다면 좀 더 효율적인 방법을 찾고있었습니다. – Abisks

+0

5 개의 값과 5 개의 각 집합 사이에 다른 구분 기호가 있습니까? 그렇다면보다 효율적인 방법이있을 수 있습니다. – Centijo

+0

split (regex)를 사용하여 구분자를 사용하는 문자열에서 이러한 값을 얻었습니다. 효율적인 방법이 있다면이를 수행 할 수 있습니까? – Abisks

0
Map<String, Integer> totals = new HashMap<String, Integer>(); 
for(int i = 0 ; i < myVector.size(); i += 3) { 
    Integer total = totals.get(myVector.get(i)); 
    if(total == null) { 
     total = 0; 
    } 
    total += Integer.parseInt(myVector.get(i + 2)); 
    totals.put(myVector.get(i), total); 
}