2011-10-05 71 views
3

我想通過一個字符串循環,並檢查每個字符,如果其中一個字符是一個數字。如果它是一個數字,我想把它作爲真實返回。我有一個字符串「崩潰」,雖然它返回它爲真(它有一個數字)。檢查每個字符的數字

這是我到目前爲止有:

public boolean isNumber() 
{ 
    String newString = "crash"; 
    boolean isNumber = true; 
    for (int i=0; i<newString.length(); i++) 
    { 
    if (Character.isDigit(newString.charAt(i))) 
    { 
     isNumber = true; 
     continue; // continue looping through the string. Go on to the next index. 
        // The character at index i is a number. 
    } 
    else 
    { 
     isNumber = false; 
     break; // terminate the for-loop and return it as false! It is not a number! 
    } 
    } 
    return isNumber; 
} 

我無法弄清楚什麼是錯的。我的邏輯似乎很好,但我的編碼不是。

編輯:我想通了。感謝你的幫助!

+1

更好的方式來做到這一點是使用['的Integer.parseInt()'](http://download.oracle。 com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String%29)嘗試將字符串解析爲一個int,然後看看是否有效 – NullUserException

+0

我試着運行代碼,它給了我正確的答案...假...你可以發佈你正在使用的代碼來測試這個函數 – jsshah

+0

奇怪...我試着運行它,它出現了錯誤! – Mindgames

回答

3

我只是跑的代碼,我得到false,符合市場預期。請仔細檢查您是否正確運行。

下面就來表達功能更簡單的方法,順便說一句:

public boolean isNumber(String string) { 
    for (int i = 0; i < string.length(); i++) { 
    if (!Character.isDigit(string.charAt(i))) { 
     return false; 
    } 
    } 

    return true; 
} 
+0

(或者的確,公共布爾isNumber(String string){return string.matches(「\\ d +」);}'。) –

+0

我喜歡這個oneliner – jsshah

+1

打敗我它在我打字時。這是最好的迭代解決方案。 –

1

您的代碼should work correctly,雖然我可能會用這個來代替:

public boolean isNumber(String newString) 
{ 
    for (int i=0; i != newString.length(); i++) 
    { 
     if (!Character.isDigit(newString.charAt(i))) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

// a regex equivalent 
public boolean isNumberRegex(String newString) 
{ 
    return newString.match("\\d+"); 
} 

如果以上所有字符是數字的檢查方法。

如果我誤解了你的問題,你要檢查,如果字符的任何是一個數字:

public boolean hasNumber(String newString) 
{ 
    for (int i=0; i != newString.length(); i++) 
    { 
     if (Character.isDigit(newString.charAt(i))) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

// regex equivalent 
public boolean hasNumberRegex(String newString) 
{ 
    return newString.match(".*\\d.*"); 
} 
+0

這裏有一個小錯誤...這個想法是在字符串中找到一個數字...因此jatin146應該返回true,因爲它有一個數字...你的將返回false – jsshah

+0

@jsshah我理解這是一個方法,只應在所有字符都是數字時返回true。 – NullUserException

+0

@jsshah:OP的描述與他們的代碼不符o_O – mellamokb

0
public static boolean isNumber(String str) 
{ 
    int len = str.length(); 
    boolean isNumber = false; 

    for(int i = 0; i < len; i++) 
    { 
     if(Character.isDigit(str.charAt(i))) 
      return true; 
    } 

    return isNumber; 
} 
+0

這相當於我的'hasNumber'函數 – NullUserException

1

那麼你可以使用Integer.parseInt("string")和捕獲異常。

try { 
    int num = Integer.parseInt("string"); 
    return true; 
} catch (NumberFormatException nfe) { 
    return false; 
} 

或用正則表達式的另一種方式:

if ("string".replaceAll("\\d+","").length() > 0) { 
    //false 
} else { 
    //true 
} 
1

也許是我沒有理解錯的話......但因爲你是使用相同的變量「ISNUMBER」,繼續當你得到一個正匹配...您返回的結果將始終是字符串的最後一個字符,除非您獲得非數字字符,在這種情況下,您立即退出。

是否要檢查整個字符串是否是數字?或者如果它包含一個數字?

0

我認爲這個代碼應該可以工作,但是在我看來,設置一個變量然後打破它來返回它是很難看的。 (我知道這樣的其他編碼器;恕我直言,他們錯了。)我也不喜歡引入不必要的測試變量,如NullUserException的解決方案。我會直接返回。

[編輯:此代碼是一樣的布羅克曼的]

public boolean isNumber() /* Note: returns true for empty string */ 
{ 
String newString = "crash"; 
for (int i=0; i<newString.length(); i++) 
{ 
    if (!Character.isDigit(newString.charAt(i))) 
    { 
    return false; /* non-digit detected */ 
    } 
} 
return true; /* all characters were digits */ 
}