2012-02-11 281 views
0

我想確定一個字符串的開頭字符是否不等於另一個字符串中的任何字符。如何比較字符與字符串中的單個字符?

我的問題是,即使角色是一個'a'例如它仍然在任何其他角色上跳。

這裏是我的代碼至今:

public void searcher(String s) 
    { 
    boolean done = false; 
    String checker = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    for (int x = 0; x < checker.length(); x++) 
    { 
     if(s.charAt(0) != checker.charAt(x)) 
     { 
      System.out.println("Answer: " + s + "is not a valid identifier\n"); 
      break; 
     } 
    } 
+0

你聽說過String.indexOf()方法? – Lukasz 2012-02-11 17:45:06

回答

3

我想你想要做什麼checker不包含String s的第一個字符時打印System.out.println("Answer: " + s + "is not a valid identifier\n");。如果是使用此代碼來做到這一點:

public void searcher(String s) 
    { 
     String checker = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     if (checker.indexOf(s.charAt(0)) == -1) 
     { 
      System.out.println("Answer: " + s + " is not a valid identifier\n"); 
     } 
    } 
+0

感謝您的幫助 – 2012-02-11 18:15:25

8
boolean isValidIdentifier = checker.indexOf(s.charAt(0)) < 0; 
3

您需要使用indexOf代替charAt,就像這樣:

if (checker.indexOf(s.charAt(0)) != -1) { 
    // Valid identifier. 
} else { 
    // Invalid identifier. 
} 

換句話說,請檢查您checker字符串包含(indexOf != -1ss.charAt(0))的第一個字符。

+0

謝謝,這真的有幫助 – 2012-02-11 17:46:24

+0

不客氣。 – 2012-02-11 17:50:07

1

如果你想保持你的代碼,因爲它是和修改一點點,這是你需要做的修改:

public void searcher(String s) { 

boolean isValid = false; 
String checker = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

for (int x = 0; x < checker.length(); x++) 
{ 
    if(s.charAt(0) == checker.charAt(x)) 
    { 
     isValid = true; 
     break; 
    } 
} 

if(isValid == true) //or if(isValid) 
    System.out.println("Answer: " + s + "is a valid identifier\n"); 
else 
    System.out.println("Answer: " + s + "is not a valid identifier\n"); 
} 

說明: 我所做的是: 默認情況下,假設第一's'的字符無效,然後遍歷默認字符串的字符,如果匹配,則s是有效的並且Break!

希望這會有所幫助!

1

一些小的改動可能有助於澄清事情:

public void searcher(String s) 
{ 
    String testValues = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    boolean found = false; 
    char target = s.charAt(0); 
    for (int i = 0; i< testValues.length(); i++) 
    { 
     if(target == testValues.charAt(i)) 
     { 
      found = true; 
      break; 
     } 
    } 
    if (found) 
     System.out.println ("target (" + target + "): FOUND"); 
    else 
     System.out.println ("target (" + target + "): NOT FOUND"); 
} 

同樣地,你可以失去整個循環和使用String.indexOf()代替:)

0

你也可以使用一個小的正則表達式匹配方法.. (代碼沒有測試)

也..特別是當新的編碼,提取物作爲儘可能將許多功能整合到小巧的方法中。

public void searcher(String s) { 
    String checker = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    if (!matches(s.substring(0,1), checker)) 
    System.out.println("Answer: " + s + "is not a valid identifier\n"); 
} 

public boolean matches(String test, String pattern) { 
    Pattern p = Pattern.compile("["+pattern+"]"); 
    Matcher m = p.matcher(test); 
    return m.matches(); 
} 

快速鏈接到有關Java正則表達式的詳細信息:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html