討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 軟體開發過程中有哪些資安漏洞?
[ 回上頁 ] [ 討論區發言規則 ]
如何判斷是否為數字呢??
更改我的閱讀文章字型大小
作者 : 0000647726(0000647726) 貼文超過200則人氣指數超過10000點
[ 貼文 206 | 人氣 22627 | 評價 130 | 評價/貼文 0.63 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/7 上午 03:56:52
當我要求使用者輸入數字時,我要如何去判斷使用者輸入的是否為數字呢??
假設這樣好了
String str=buffer.readLine();//那個buffer物件是BufferedReader裡的
雖然我讀出來的是字串但我可以將他轉為數字,但若使用者是輸入英文或者是一堆奇怪的符號時該怎麼辨呢?
我想了滿久了但仍想不出有什麼方法好解決^^"!希望各位教教我謝謝!
作者 : chou2005(Chou)
[ 貼文 3 | 人氣 1 | 評價 20 | 評價/貼文 6.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人0000647726註記此篇回應為很有道理 2006/8/7 上午 09:27:28
如果你要判斷一個讀出的字串是否全部都是數字, 你可以先將讀到的字串轉存到 array of char像:

   char[] str2 = str.toCharArray();

然後使用 for loop 去讀每一個字原然後一個個判斷字原是否為數字, 像:

   for(int index=0; index < str.length(); index++) {
     if(!Character.isDigit(str2[index])) {
     //System.out.println("這字串包含非數字的字原");
     break; //字串中出現一個非數值的字原就結束 loop, 因為這不是我們要的字串
     }
   }
作者 : 0000647726(0000647726) 貼文超過200則人氣指數超過10000點
[ 貼文 206 | 人氣 22627 | 評價 130 | 評價/貼文 0.63 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/7 下午 03:29:59
GOOD
但我想問說,除了這種方法外還有別種方法嗎?
作者 : aries_chen(Aries) Java卓越專家貼文超過500則
[ 貼文 782 | 人氣 1941 | 評價 3690 | 評價/貼文 4.72 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/7 下午 04:03:07
丟進parseXXX(String s)
發生Exception即不為數字
作者 : 0000647726(0000647726) 貼文超過200則人氣指數超過10000點
[ 貼文 206 | 人氣 22627 | 評價 130 | 評價/貼文 0.63 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/7 下午 04:47:47
不好意思樓 上那位大大您寫的我只能大概猜出來而以,但寫了又不正確,能夠請您將程式碼大概寫給我看看嗎???就那主要的一小段就好了,謝謝!
作者 : aries_chen(Aries) Java卓越專家貼文超過500則
[ 貼文 782 | 人氣 1941 | 評價 3690 | 評價/貼文 4.72 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/7 下午 07:11:26
大概就是這樣吧
看看要檢查的是哪種型態,就用哪種parse函式

try {
 int i = Integer.parseInt("123");
 System.out.println(i);
} catch(Exception e) {
 System.out.println("error input...");
} finally {
 System.out.println("do something...");
}
作者 : 0000647726(0000647726) 貼文超過200則人氣指數超過10000點
[ 貼文 206 | 人氣 22627 | 評價 130 | 評價/貼文 0.63 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/8 上午 01:25:43
樓上那位大大您講的我還是看不太懂乀....!
因為丫,你那樣並不會發生Exception丫!可否就個要求對方輸入數字然後再和您所講的丟出個Exception來給我看看呢???!不好意思,剛學沒多久>"<!你們講的我有點兒不太懂
作者 : chou2005(Chou)
[ 貼文 3 | 人氣 1 | 評價 20 | 評價/貼文 6.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/8 下午 01:50:57
try {
 int i = Integer.parseInt("123");
 System.out.println(i);
} catch(Exception e) {
 System.out.println(e.toString()); //print Exception message
} finally {
 System.out.println("This is finally block.");
}

當你使用 parseInt(), 其內部的參數需為 10進位的整數 (0~9) 除了第一個字元.
因為第一個字元可以是負號 (-). 當參數內的所有字元都是 10進位的數值時,
parseInt() 會回傳整個整數字串.

換句話說, 當 parseInt() 內部的參數為:
123 或 -123 或 2, 上面的程式都不會有 Exception 產生

但當內部的參數變為:
1a3 或 -12.3 或 a, 等等非整數的字串, 程式就會產生 Exception.

我之前的程式碼不會檢查輸入的字串是否為負的整數 (如 -123),
所以我建議你使用 Aries 大大的 parseInt().
作者 : 0000647726(0000647726) 貼文超過200則人氣指數超過10000點
[ 貼文 206 | 人氣 22627 | 評價 130 | 評價/貼文 0.63 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/8 下午 06:59:56
樓上那位大大您講的我懂了,只不過若是負數的話我可以寫個if判斷式去判斷不就好了嗎??
判斷是否在0~100之間便可不是嗎??那麼我用你所寫的程式下去寫的話會不會比較吃力呢??
我用Character.isDigit不是會更方便嗎??因為自己仍然不懂什麼時機該怎麼用會比較好,所以若有說錯話部份還請多多糾正^^!
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1056 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/9 上午 05:49:19
這樣的心態要改正∼
一個程式設計師最基本的一定要學會把東西做對,
千萬不能有得過且過的心態∼
作者 : bensontan(Benson) 貼文超過1000則人氣指數超過30000點
[ 貼文 1056 | 人氣 40462 | 評價 3290 | 評價/貼文 3.12 | 送出評價 80 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/9 上午 05:53:04
試試看 parseInt("123abc")
作者 : aries_chen(Aries) Java卓越專家貼文超過500則
[ 貼文 782 | 人氣 1941 | 評價 3690 | 評價/貼文 4.72 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/9 上午 11:33:26
>我用Character.isDigit不是會更方便嗎??因為自己仍然不懂什麼時機該怎麼用會比較好,所以若有說錯話部份還請多多糾正^^!

其實對我個人來說,並沒有說一定堅持要用哪種方法
而是因為你問說有沒有別種作法,所以我用了現成的parseXXX的作法

當現成的元件可以提供某樣功能時,我會使用現成的元件
因為套句老話,不用重複發明輪胎
再者,穩定性不會有問題

也有人對是否該窮盡自己的能力,找出最好的方式。這個我也贊成
不過,這是視情況而言

對我而言,一個程式設計師能夠善用系統給的資源,而且
當需要某種系統沒提供的功能時,他也能夠去找出替代方案或是自己做出來
我覺得,這樣姑且可說是個稱職的Programmer吧
作者 : chou2005(Chou)
[ 貼文 3 | 人氣 1 | 評價 20 | 評價/貼文 6.67 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/8/14 上午 05:31:49
>樓上那位大大您講的我懂了,只不過若是負數的話我可以寫個if判斷式去判斷不就好了嗎??
>判斷是否在0~100之間便可不是嗎??那麼我用你所寫的程式下去寫的話會不會比較吃力呢??
>我用Character.isDigit不是會更方便嗎??因為自己仍然不懂什麼時機該怎麼用會比較好,所以若有說錯話部份還請多多糾正^^!


如果你是想知哪個程式跑的比較有效率, 你可以去比較他們的演算法(Algorithm).
藉由 Algorithm 去了解他們他們跑完一個程式需要多少時間 (Time Complexity)
和用掉多少記憶體 (Space Complexity). 最快完成的當然是最有效的程式.

你可以用 "Big Oh Notation", 去幫你完成判斷 (如果不清楚 Big Oh Notation,
可以去請教你的老師或詢問論壇上其他的大大或使用 google 收尋相關的主題,
我有點忘記 Big Oh Notation, 所以無法詳細解釋給你聽).

以我的程式為例, 跑完整個 algorithm 需要 Time Complexity: O(n)
如果跑 Aries大大的程式, 整個 algorithm "可能"也需要 Time Complexity: O(n)
(我之所以說"可能"是因為我不太清楚 parseInt() 的 Time Complexity,
不過我覺得應該是 O(n), 如有錯請其他大大指教)

既然 O(n) = O(n), 那麼兩個程式所需的時間是一樣的.
(至於需要用掉多少記憶體(Space Complexity), 我就不介紹了, 你如果有興趣的話,
可以到 google 去收尋與 space complexity 有關的主題)

--------------------------------------------------------

至於你說什麼時機用比較好, 其實, 完成一個程式並不是只有一個方法.
寫程式是需要經驗的, 當你經驗越來越多時, 認識的functions/methods 也會越來越多.
到時你就會知道直接去拿別人寫好的 functions/methods 來簡化你的程式. 加油吧.



 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 570 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125