2012-02-11 284 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