[問題] 如何在字串中讀取字元

看板java作者 (咩滴可)時間8年前 (2015/10/21 22:35), 編輯推噓13(13018)
留言31則, 11人參與, 最新討論串1/1
剛剛寫到一題 題目會給好幾串英數字 "1A3B4S\n" "4X1b1X\n" " ......." 然後要輸出 "ABBBSSSS\n" "XXXXbX\n " "....... " 只是我不知道要怎麼單獨去讀取個別的字串出來運算 上網查了一下好像是用charAt(); 先寫了下面的程式碼測試 Scanner scanner = new Scanner(System.in); String str1 = scanner.nextLine(); for(int i=0;i<132;i++) \\每一列不會超過132個字元 { int num = str1.charAt(2*i); System.out.print(num); } 但是他卻顯示 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 4850 at java.lang.String.charAt(String.java:658) 請問是哪裡出問題了呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.23.175 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1445438123.A.5F8.html

10/21 22:55, , 1F
你知道這個錯誤訊息是什麼意思嗎?
10/21 22:55, 1F

10/21 23:00, , 2F
簡單的說,你的字串如果只有3,charAt的有效範圍就是0,1,2
10/21 23:00, 2F

10/21 23:00, , 3F
你想想看嘛,才三個字你跟他要charAt(5)他要給你什麼?
10/21 23:00, 3F

10/21 23:01, , 4F
當然是阿殺力的報錯給你看阿
10/21 23:01, 4F

10/21 23:06, , 5F
那請問要怎麼改呢 現在毫無頭緒啊
10/21 23:06, 5F

10/21 23:07, , 6F
先把字串填滿0嗎?
10/21 23:07, 6F

10/21 23:42, , 7F
你要知道你的字串有多長
10/21 23:42, 7F

10/22 00:28, , 8F
輸入的字串沒有固定長度@@
10/22 00:28, 8F

10/22 00:31, , 9F
那就先判斷字串長度
10/22 00:31, 9F

10/22 02:07, , 10F
不是預先知道, 是輸入之後去看看它有多長
10/22 02:07, 10F

10/22 02:46, , 11F
給你幾個類別方法
10/22 02:46, 11F

10/22 02:49, , 12F
String.tochararray String.length character.isdigit
10/22 02:49, 12F

10/22 08:23, , 13F
strl.length()應該有幫助
10/22 08:23, 13F

10/22 08:58, , 14F
JFlex 表示:
10/22 08:58, 14F

10/22 15:31, , 15F
i < str1.length()
10/22 15:31, 15F

10/22 17:38, , 16F
感謝各位 可是還有個問題就是他讀的是char
10/22 17:38, 16F

10/22 17:39, , 17F
變成int 的話數字會跑掉
10/22 17:39, 17F

10/22 17:40, , 18F
變成acsii 的形式
10/22 17:40, 18F

10/22 19:49, , 19F
這個問題因為不清楚你的程度到哪裡不太好教
10/22 19:49, 19F

10/22 19:49, , 20F
理論上應該要講 String.valueOf()
10/22 19:49, 20F

10/22 19:50, , 21F
不過看你這題目好像只有一位數, 那這個比較不那麼直覺的
10/22 19:50, 21F

10/22 19:50, , 22F
(int)(ch - '0') 也是可以用
10/22 19:50, 22F

10/22 19:51, , 23F
啊, 不是 String.valueOf, 是 Integer.parseInt 才對
10/22 19:51, 23F

10/22 19:53, , 24F
之所以在這裡講 parseInt 怪怪的是因為它吃 String
10/22 19:53, 24F

10/22 19:53, , 25F
這代表要嘛你要用 String.substring 切子字串
10/22 19:53, 25F

10/22 19:53, , 26F
要嘛你得把那個 char 變成一個長一個字的 String
10/22 19:53, 26F

10/22 19:54, , 27F
不管走這三條路的哪一條都會讓你多花一點時間理解應用...
10/22 19:54, 27F

10/23 19:02, , 28F
每一列不會超過132字元 你i>66 2*i就爆炸了
10/23 19:02, 28F

10/25 18:11, , 29F
scanner 很好用 可以去找找範例
10/25 18:11, 29F

10/30 02:18, , 30F
今天大家好友善喔
10/30 02:18, 30F

10/30 22:33, , 31F
哈 平常應該是會被砲的問題XD
10/30 22:33, 31F
文章代碼(AID): #1M9wAhNu (java)
文章代碼(AID): #1M9wAhNu (java)