웹 인덱싱과 비슷한 지정을해야합니다. 기본적으로 여러 파일 (ASCII 형식)이 있고 단어 빈도를 계산해야합니다.자바에서 프랑스어 문자 읽기
파일 중 하나에 프랑스어 문자 (예 : ç 또는 è)가 포함되어 있습니다. 내 출력 파일에서 프랑스어 문자가 포함 된 단어 중 일부는 올바르게 표시되지 않으며 중복으로 인해 나타납니다. grimaçaient와 grima aient가 있는데 예를 들어 guère와 gu re가 있습니다.
이제 사용 된 알고리즘과 관련하여 catch가 있습니다. 필자는 텍스트 파일을 여러 파일로 분할하지 않고 파일의 특정 오프셋을 읽는 방식으로 분할하는 병렬 방식으로 계산을 수행해야합니다. 각 조각마다 첫 번째 단어가 두 조각 사이에서 분리되었는지 확인해야합니다. 예인 경우 무시할 수 있으며 마지막 단어가 분할되었는지도 확인해야합니다. 예인 경우 더 많은 문자를 읽어야합니다 구분 기호에 도달 할 때까지 내 버퍼에 저장하십시오. 이상한 이이 부분과 관련 있다고 생각합니다.
byte[] buffer = new byte[D]; // D is 1024
file.seek(offset);
file.readFully(buffer);
이 내가 주변 단어를 읽는 방법은 다음과 같습니다
이 내가 조각을 읽는 방법이다.
file.seek(offset - 1);
byte[] buf = new byte[1];
buf[0] = file.readByte();
String first_w = new String(buf);
마지막 단어의 경우 :
이 마지막 단어의 일부, 첫 번째 단어의 일부에 나타납니다String last_word = "";
byte[] buf = new byte[1];
do
{
buf[0] = file.readByte();
String aux = new String(buf);
if(isDelim(aux.charAt(0))
{
break;
}
else
{
last_word += aux;
}
}while(true);
, 어쩌면 가장 중요한 첫 번째 단어를
사실 이 프래그먼트의 주요 부분 (readFully로 읽은 부분)에 나타나면 string이 문자열의 첫 번째 문자 또는 마지막 문자로 나타납니다.나는이 문제를 어떻게 해결할 수 있습니까?
EDIT : 파일은 RandomAccessFile 개체입니다.
UTF-8 또는 ISO-8859-15 파일 인코딩이란 무엇입니까? 몇 가지 중요한 차이가 있습니다. –
파일에 ç 또는 é가 포함되어 있으면 ASCII가 해당 문자를 지원하지 않으므로 ASCII가 아닙니다.Reader와 적절한 charset을 바이트로 읽으 려하지 않고 문자로 읽습니다. 'new String (buf)'는 적절한 charset을 사용하지 않습니다. 기본 charset을 사용합니다. javadoc을 읽습니다. –
인코딩은 ISO-8859 텍스트입니다. –