teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤記訂正

2017/01/05 19:55

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  Macのデフォルトの文字セットとnowmoney.txtのエンコードが不一致である(またはBOMコードがあるとか)などの理由でreadLine()した結果の文字列が正確に"3"ではないのだと思います。例外メッセージには"3"となってますが、実は表示不可能な文字が含まれていたりしないか確認してみてはどうでしょう?
2
2
 
3
- (Macってデフォルトではunixのコマンドが使えないと聞いたことがあるのですが...)odのようなバイナリーダンプコマンドがあるならそれでnowmoney.txtの中身をダンプするか、エラーが発生しているJavaプログラムのところで文字列の中身を表示してみるとよいと思います。
3
+ (Macってデフォルトではunixのコマンドが使えないと聞いたことがあるのですが...)odのようなバイナリーダンプコマンドがあるならそれでnowmoney.txtの中身をダンプするか、エラーが発生しているJavaプログラムのところで文字列の中身を表示してみるとよいと思います。
4
4
 
5
5
  ```java
6
6
  String str = ...;

2

追記

2017/01/05 19:55

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -13,4 +13,11 @@
13
13
  ```
14
14
  上記はパースする文字列の中身を文字毎に16進数で印字するものですが、期待通りstrの中身が"3"なら
15
15
  str = 33
16
- と表示されるはずです。
16
+ と表示されるはずです。
17
+
18
+ ---
19
+
20
+ 追記:自分は過去にこうしたデバッグをよくやったのである程度ASCIIコードを覚えてしまったのですが、文字列を16進ダンプしただけではわかりにくいので
21
+ `String.format("%02x:'%<c ", c)`
22
+ として16進数と文字を両方印字すると分かりやすいかも知れません。こうしておくと印字可能な文字はそのまま表示されますし、印字不可能なものがあっても16進数の内容で「それがなにか」を判読できます。strが期待通り"3"だった場合は`str = 33:'3 `と印字されます。
23
+ (`%c`の後ろに空白文字をわざわざ入れているのは印字文字がサロゲートペアの1文字目に該当する文字だった場合その文字の次の文字が文字化けにより見えなくならないようにするための回避策です。)

1

誤記

2017/01/04 13:54

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -11,6 +11,6 @@
11
11
  int value = Integer.parseInt(str);
12
12
  ...
13
13
  ```
14
- 上記はパースする文字列の中身を文字毎に16進数で印字するものですが、期待通りstr中身が"3"なら
14
+ 上記はパースする文字列の中身を文字毎に16進数で印字するものですが、期待通りstr中身が"3"なら
15
15
  str = 33
16
16
  と表示されるはずです。