如何将字符与字符串中的单个字符进行比较?

时间:2012-02-11 17:42:03

标签: java

我正在尝试确定字符串开头的字符是否不等于另一个字符串中的任何字符。

我的问题是,即使角色是'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;
        }
    }

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您需要使用indexOf代替charAt,如下所示:

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

换句话说,检查您的checker字符串是否包含(indexOf != -1ss.charAt(0))的第一个字符。

答案 2 :(得分:3)

我认为您要做的是在System.out.println("Answer: " + s + "is not a valid identifier\n");不包含checker的第一个字符时打印String s。如果是这样,请使用此代码:

    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");
        }
    }

答案 3 :(得分: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为VALID且Break!

希望这有帮助!

答案 4 :(得分: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()代替:)

答案 5 :(得分: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