GB3212 エンコーディング (中国語) のファイルがあります。ファイルはここからダウンロードされますhttp://lingua.mtsu.edu/chinese-computing/statistics/char/list.php?Which=MO Windows の wget と同じように、ModernChineseCharacterFrequencyList.html ファイル名に保存されます。
以下のコードは、Java がある方法では最後まで読み取ることができず、別の方法ではできることを示しています。
つまり、コードScanner
で作成された場合はscanner = new Scanner(src, "GB2312")
機能しません。そして、Scanner
で作成された場合scanner = new Scanner(new FileInputStream(src), "GB2312")
、それは機能します。
区切りパターンの行は、グリッチが残る別のオプションを示しているだけです。
public static void main(String[] args) throws FileNotFoundException {
File src = new File("ModernChineseCharacterFrequencyList.html");
//Pattern frequencyDelimitingPattern = Pattern.compile("<br>|<pre>|</pre>");
Scanner scanner;
String line;
//scanner = new Scanner(src, "GB2312"); // does NOT work
scanner = new Scanner(new FileInputStream(src), "GB2312"); // does work
//scanner.useDelimiter(frequencyDelimitingPattern);
while(scanner.hasNext()) {
line = scanner.next();
System.out.println(line);
}
}
これは不具合ですか、それとも仕様による動作ですか?
アップデート
コードが機能する場合、すべてのトークンを最後まで読み取るだけです。機能しない場合は、例外やエラーメッセージなしで、ほぼ途中で読み取りをキャンセルします。
ブレークの場所に特異点は見つかりませんでした。また、2^32 のような「魔法の」数も現れませんでした。
更新 2
元々、この動作は Sun の JavaSE 1.6 を搭載した Windows で発見されました。
そして今、OpenJDK 1.6.0_23 を使用する Ubuntu でも同じ動作が見られます