2014-04-16 5 views
0

지도 축소 프로그래밍에 Java를 사용하고 있습니다.ByteArray - bytearray.tostring()을 사용하지 않고 문자열 비교

10MB 데이터가있는 바이트 배열이 있습니다. 나는 그것이 공간인지 아닌지 알아보기 위해 각각의 바이트를 비교하기를 원한다. 나의 기본적인 목적은 스페이스를 사용하여 단어를 분리함으로써이 바이트 배열의 각 단어를 얻는 것이다 (이것이 내 아이디어 다. 다른 제안은 환영이다). 문자열을 사용하여 확실히 할 수 있습니다. 즉 처음에는 전체 바이트 배열을 문자열로 변환 한 다음 비교 한 다음 각 단어를 가져 오기 위해 부분 문자열을 수행하지만 데이터를 복제합니다. 나는 stringbuilder, StringTokenizer, substring과 같은 복제물을 만드는 것을 원하지 않는다.

나는 bytearray에있는 각 단어를 원하지만, 나는 메모리 컴퓨팅에서하고 있고 중복으로 인해 자원이 부족해지기 때문에 중복이 없다. 어떤 제안/아이디어가 진행될지를 알 수 있습니다. 그냥 (그리고 단어 문자열이 OK입니다) 전체 배열의 문자열을 만들지 않도록하려면

+0

, 당신은 바이트하여 파일 바이트를 읽을 수 있습니다 그것을 공간에 해당하는 ASCII 코드와 비교하십시오. – mok

+0

그럴 수 없습니다. 이 바이트 배열이 나타내는 문자는 무엇인지 모릅니다. _some_ 인코딩의 경우 공백 문자에 대한 1 - 2 바이트의 <-> char 숫자 매핑이 있지만 그 정보에 의존하고 싶습니까? – fge

+0

그래서 아마, 나는 어떤 인코딩이 사용되고 있는지에 대한 점검을 할 수 있으며, char 문자 코드 비교에 의한 char을 사용할 수있다 ... 그것을 수행하는 방법을 찾고있다. charAt 위치가 공백 문자로 ASCII가되도록 확인하는 byteArray.getCharAt (pos)와 같은 함수 – drk

답변

0

, 당신은

HashSet<String> words = new HashSet<String>(); 
int pos = 0; 
int len = byteArray.length; 
for (int i = 0; i <= len; i++) { 
    if (i == len || byteArray[i] == ' ') { 
    if (i > pos + 1) { 
     String word = new String(byteArray, pos, i - pos, "UTF-8"); 
     words.add(word); 
    } 
    pos = i + 1; 
    } 
} 

추신을 할 수 귀하의 의견은 파일에서 바이트 배열을 읽을 것을 제안하는 것 같습니다. 그것을 피하고 직접 파일에서 단어를 읽는 것이 어떻습니까? 당신은 (대신 공간)을 구분 기호로 줄 바꿈 (\ n을)를 사용할 수 있다면, 당신은 단지 같은 것을 할 수있다 : 내가 제대로을 가지고있어

HashSet<String> words = new HashSet<String>(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args), "UTF-8")); 
while (true) { 
    String word = reader.readLine(); 
    if (word == null) { 
    break; 
    } 
    words.add(word); 
} 
reader.close(); 
+1

좋은 설명, 고마워,하지만 난 병렬 프로그래밍을 사용하는 또 다른 아이디어가 있기 때문에 readLine()을 사용하지 않고 .. 어쨌든 감사합니다 :) – drk