2014-02-13 49 views
1

我仍在使用Java開發一個項目,想問問有人能幫助我嗎?Java/startsWith多個字母?

我在問我是否可以檢查一個字符串與多個字母與「startsWith」?

喜歡:

if (string Alpha.startsWith("a"||"A"||"b"||"B"||"c"||"C"||"d"||"D")){ 
         System.out.println("Wrong!"); 
         System.out.println("\n"); 
        } 
        else{ 
         System.out.println("Wrong Key!"); 

任何解決方案?

+5

你可以使用正則表達式? – yotommy

+0

嘗試http://regex101.com/ – dinesh707

回答

5
char first = Character.toLowerCase(str.charAt(0)); 
if (first >= 'a' && first <= 'd') 
{ 
    // etc. 
} 

如果你想避免可能locale issues,可以給兩個範圍,一個是小寫,另一個用於大寫:

char first = str.charAt(0); 
if ((first >= 'a' && first <= 'd') 
    || (first >= 'A' && first <= 'D')) 
{ 
    // etc. 
} 
+0

準確地說,我會說。 – Sentry

+0

謝謝;) 那我搜索:) – Atlantikdiver

+0

問題是關於'Java',而不是'C'? –

1

做這樣的事情:

if (Alpha.startsWith("a") || Alpha.startsWith("A") || // and so on 
3

我會把這個新的方法:

private boolean myStartsWith(String... args) { 
    for(String str : args) { 
     if(args.startsWith(str) { 
      return true; 
     } 
    } 
    return false; 
} 

然後用它:

str.myStartsWith(new String[]{"a","b","c"}); 
+0

爲什麼downvote?請留下評論。 – Maroun

+0

我沒有downvote,但會處理大寫? –

+0

@KevinBowersox將它傳遞給String數組很容易。或者使用'toLowerCase'或其他..我只是給他一個方向。 – Maroun

2

正如其他人所說,這顯然是其中的正則表達式應該使用的情況下:

java.util.regex.Pattern p = java.util.regex.Pattern.compile("^[a-cA-C]"); 
java.util.regex.Matcher m = p.matcher(alpha); // 
if (m.matches()) { 
... 
0
private static boolean startsWith(String value, String[] chars){ 
    for(String check:chars){ 
     if(value.indexOf(check) == 0 || value.indexOf(check.toUpperCase()) == 0){ 
      return true; 
     } 
    } 
    return false; 
} 

使用

public static void main(String[] args) { 
     String val1 = "A string"; 
     String val2 = "a string"; 
     String val3 = "x string"; 
     String[] chars = {"a","b","c","d"}; 

     System.out.println(startsWith(val1,chars)); 
     System.out.println(startsWith(val2,chars)); 
     System.out.println(startsWith(val3,chars)); 
    } 
2

做到這一點的最佳方法

str.matches("^[A-Da-d].+"); 
+1

如果你想從字符串的開始處進行匹配,你必須在正則表達式前加上一個「^」,否則任何帶有一些字母的字符串都會匹配! –

+0

你說得對,我的錯。 – dstronczak

+0

而我應該在評論之前嘗試過,請參閱我在lyaffes上的後續回答! –

2

試試這個代碼:

String str = "ABCDEF"; 
if(str.matches("(a|A|b|B|c|C|d|D).*")) { 
    ... 
}; 
+0

如果你想匹配從字符串的開頭,你必須在正則表達式上加上一個「^」,否則任何帶有一些字母的字符串都是匹配的! –

+0

我不這麼認爲,請提供一個我的代碼工作提供的錯誤匹配的示例字符串。 – lyaffe

+0

Argh,你說的對,當我寫這篇評論的時候,我正在用Perl的思維!在Perl中,匹配表示'$ mystery =「@#++ ** + ::,。,ABCDEF」;'if'(mystery =〜m /(a | A | b | B | c | C | d | D)。* /)...'會匹配中間的A,顯然這在Java中不是真的!你能否對你的文章做一些修改,以便我可以改變我的投票? –

0

你可以這樣做:

String str = "Alpha"; 
    String[] tar = "aAbBcCdD".split(""); 
    for(String s: tar) { 
     if(str.startsWith(s)){ 
     ...your own logic 
     } 
    }