2011-11-29 82 views
2

我需要測試給出的字符串是不是一個整數或者包含至少五個英文字母。我知道如何使用這些迴路來實現它。但我認爲它會影響我的效率code.Can你可以告訴我任何其他有效的方法來做到這一點?java-字符串驗證

對於如:

11111111 //ERROR(Whole number) 
    1111aa11 //ERROR(less than 5 English alphabets) 
    aAAAAA11 //TRUE 
+0

你目前有什麼代碼? –

+0

整數或包含字符?你想讓你的字符串被驗證的是什麼?數字或字符? – gprathour

+0

both ..我需要檢查字符串是一個整數還是包含5個以下的字母。 – freshDroid

回答

1

你可以做一個正則表達式,例如像[a-zA-Z]{5,}|[\\d]+

+3

是的,但正則表達式仍然是一個O(n)的實現。它只是在幕後爲你做了骯髒的工作。 :) –

+0

@ElfsЯUs,當然,好點,但正如你所說,你可能做的最好的是O(n),並避免陷入做O(mn)的陷阱。與嵌套循環恕我直言相比,正則表達式會更乾淨,更容易維護。 – aishwarya

0

按我對你的問題的理解,

正在找得到的字符串的長度?然後你可以使用字符串的.length()。

您還可以使用Integer.parseInt(字符串)檢查號碼是整數。

0

你應該嘗試正則表達式,例如,測試一個給定的字符串是一個數字,以下可以工作:

String t = "222x"; 
String pattern2 = "(\\d+)";  
System.out.println(java.util.regex.Pattern.matches(pattern2, t)); 

這將失敗,因爲該字符串包含一個「X」,去掉X它會返回true。你可以嘗試相同的另一種情況。

希望這是你在找什麼。

4

這是一個O(N)的問題...不要緊,你要做什麼你將不得不檢查字符串中的每個字符,看看它是一個數字還是字母表字符。如果您正在針對已知字母和/或數字的數組檢查每個字符,可能會意外地將其變爲O(n^2)或O(mn)問題。但是,如果你只是使用散列表或者一些ASCII標準化方法,那麼這應該是一個O(n)解決方案,並且不能做得更快。如果您希望收到關於其實施效率的評論,請發佈您的代碼。

0

首先將其置於布爾方法中。如果它返回true,那麼它是一個數字,否則它是有效的。看下面的例子:

public boolean validateInput(String x) { 

    try { 

     Integer.parseInt(x); 

    } catch (NumberFormatException ex) { 
     return false; 
    } 

    return true; 
}