需求:從android的EditText中擷取輸入的數字,作為連接埠號碼。
基本思路 ,見下面代碼示意:
[java]
view plaincopyprint?
- String str = editor.getText().toString().trim();
- int port = Integer.parseInt(str);
如果使用者輸入的字元包括非數字如mark123,那麼,會報異常:[html]
view plaincopyprint?
- 08-15 07:13:48.294: ERROR/AndroidRuntime(12281): java.lang.NumberFormatException: unable to parse 'dd' as integer
parseInt()源碼:
[java]
view plaincopyprint?
- /**
- * Parses the specified string as a signed decimal integer value. The ASCII
- * character \u002d ('-') is recognized as the minus sign.
- *
- * @param string
- * the string representation of an integer value.
- * @return the primitive integer value represented by {@code string}.
- * @throws NumberFormatException
- * if {@code string} is {@code null}, has a length of zero or
- * can not be parsed as an integer value.
- */
- public static int parseInt(String string) throws NumberFormatException {
- return parseInt(string, 10);
- }
可以看出,參數字串為null、或者長度為0以及非數位字元時,報NumberFormatException異常。
那麼,如何解決這個問題?
簡單辦法,就是捕捉異常資訊:
[java]
view plaincopyprint?
- String str = editor.getText().toString().trim();
- try {
- int port = Integer.parseInt(str);
- } catch(NumberFormatException nfe) {
- // to do
- }
還有一個辦法,利用EditText的xml屬性(android:digits)。
[html]
view plaincopyprint?
- <EditText
- android:id="@+id/edit"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:inputType="number"
- android:digits="0123456789"/>
這樣以來,在該EditText中只可以輸入數字,其它任何字元都不會被接受。如斷行符號、空格等。
類似的,只接受大小寫字母:
[html]
view plaincopyprint?
- android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"只可以輸入52個大小寫字母
或者只接受數字與字母:
[html]
view plaincopyprint?
- android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
關於 parseInt() 用法,下面再示一例:
[java]
view plaincopyprint?
- // 將16進位轉換為10進位
- int decimalNum = Integer.parseInt("101a", 16);
- System.out.println("decimalNum= " + decimalNum);
-
- // 將10進位轉換為16進位
- String str = Integer.toHexString(100);
- System.out.println("str= " + str);
- int hexNum = Integer.parseInt(str);
- System.out.println("hexNum= " + hexNum);
-
- // Integer類還有toBinaryString()、toOctalString()將int轉換為2進位、8進位
轉自:http://blog.csdn.net/androidbluetooth/article/details/6689726