如果你只是想避免造成整個陣列的String(和詞串都行),你可以做
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();
如果我正確地得到了你,你可以讀取字節的文件字節並將其與空格對應的ASCII碼進行比較。 – mok
你不能那樣做。您不確定該字節數組代表什麼字符。它確實發生在_some_編碼中有一個1-1字節的<->字符數字映射的空間字符,但是你想要依賴於? – fge
所以很可能,我可以檢查正在使用什麼編碼,並基於我可以使用字符通過字符ASCII代碼比較...正在瀏覽如何做到這一點...我想我可以嘗試有一個函數如byteArray.getCharAt(pos),它檢查charAt位置是否爲空間的ASCII碼 – drk