テキストファイルから読み出した文字列を利用するプログラムを組んでいたのですが、よくわからない現象が起きたため、どなたか解説をお願いできますでしょうか。
コードは:
java
1public class Hoge { 2 3 private static final Logger logger = LoggerFactory.getLogger(Hoge.class); 4 5 public void hoge(String filePath) throws IOException{ 6 Path path = Paths.get(filePath); 7 path.toRealPath(); 8 9 try(BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { 10 while (true) { 11 String line = bufferedReader.readLine(); 12 if(line == null) break; 13 logger.debug(line); 14 } 15 } catch (IOException e) { 16 e.printStackTrace(); 17 } 18 } 19}
テキストファイルは:
hogehoge piyopiyo moyamoya
のような感じです。
これで出力されたログを見ると、
log
113:48:44.116 [main] DEBUG packagename.Hoge - ?hogehoge 213:48:44.116 [main] DEBUG packagename.Hoge - piyopiyo 313:48:44.117 [main] DEBUG packagename.Hoge - moyamoya
のように、なぜか一行目の先頭にだけ「?」がついてしまいます。
Javaのコードでログ出力する前にif(line.startsWith("\\?")) line.replace("\\?", "");
など入れてみましたが特に効果が出ず(文法がおかしいでしょうか?)、仕方がないので、テキストファイルのほうで、最初の1行目のみ関係ない文字列をいれて:
aiueo hogehoge piyopiyo moyamoya
Javaの方でbreakするif文の後に続けてif(line.contains("aiueo")) continue;
のようにして無視することで一応意図通りに動かすことはできましたが、このやり方では良くないと思っているので、根本的に何がいけないのかを知りたくて、質問させていただきます。
【追記】
メモ帳で保存したUTF-8の.txtでしたのでBOM付きとなってしまったようです。nkf --overwrite --oc=UTF-8 filename.txt
として読み直しましたら「?」は外れました。ご回答ありがとうございました。
回答1件
あなたの回答
tips
プレビュー