Java 有没有一种更有效的方法来遍历字符串直到到达某个字符?

Java 有没有一种更有效的方法来遍历字符串直到到达某个字符?,java,string,Java,String,在这个方法中,我试图遍历一个包含70个字符的字符串,直到找到一个不是“a”或“B”的字母。一旦我发现一个不属于我的角色,我应该返回“ERR!”;如果字符串长度不完全为70个字符,我也会返回此语句 我做这件事的方法是跟踪到目前为止统计的字母总数,以及错误字母的总数(字母不是“A”或“B”)。然后我说,如果错误字母的数量不是0,并且字符串的长度不是70,则返回“ERR!”消息 public static String checkInput(String answers) { int

在这个方法中,我试图遍历一个包含70个字符的字符串,直到找到一个不是“a”或“B”的字母。一旦我发现一个不属于我的角色,我应该返回“ERR!”;如果字符串长度不完全为70个字符,我也会返回此语句

我做这件事的方法是跟踪到目前为止统计的字母总数,以及错误字母的总数(字母不是“A”或“B”)。然后我说,如果错误字母的数量不是0,并且字符串的长度不是70,则返回“ERR!”消息

 public static String checkInput(String answers) { 
      int count = 0;
      int wrong = 0;
      String errorMessage = ""; 

      for(int i = 0; i < answers.length(); i++) {
         count++;
         if(answers.charAt(i) != 'A' && answers.charAt(i) != 'B') {
            wrong++;
         }   
      }   

      if(wrong != 0 || count != ANSWER_LENGTH) {
         errorMessage = "ERR!";
      }   
      return errorMessage;
   }  
publicstaticstringcheckinput(字符串应答){
整数计数=0;
int错误=0;
字符串errorMessage=“”;
for(int i=0;i
我的代码工作得非常好,但如果有什么可以缩短或简化以减少程序中的行数,那就是我所需要的。任何想法/建议都将不胜感激

行数(或代码行数)在java中并不重要,但无论如何,这里有一个更短更快的变体:

public static final String checkInput(final String answers) {
    if (answers.length() != ANSWER_LENGTH)
        return "ERR!"; // fail fast
    for (int i = 0; i < answers.length(); i++)
        if (answers.charAt(i) != 'A' && answers.charAt(i) != 'B')
            return "ERR!"; // fail fast
    return "";
}
公共静态最终字符串检查输入(最终字符串答案){
if(answers.length()!=答案长度)
返回“ERR!”;//快速失败
for(int i=0;i
行数(或代码行数LOC)在java中不是很重要,但无论如何,这里有一个更短更快的变体:

public static final String checkInput(final String answers) {
    if (answers.length() != ANSWER_LENGTH)
        return "ERR!"; // fail fast
    for (int i = 0; i < answers.length(); i++)
        if (answers.charAt(i) != 'A' && answers.charAt(i) != 'B')
            return "ERR!"; // fail fast
    return "";
}
公共静态最终字符串检查输入(最终字符串答案){
if(answers.length()!=答案长度)
返回“ERR!”;//快速失败
for(int i=0;i
我会在Lashane的答案中添加一个空检查,以确保稳健性

if (answers == null || answers.length() != 70)

我会在Lashane的答案中添加一个空检查,以确保稳健性

if (answers == null || answers.length() != 70)

这样,如果存在除A或B以外的任何字符,它将立即失败

public static final String checkInput(final String answers) {
    if (answers==null || answers.length() != ANSWER_LENGTH)
        return "ERR!"; // fail fast
    if(!answer.matches("[AB]*")) 
       return "ERR!"; // fail fast
    return "";
}

这样,如果存在除A或B以外的任何字符,它将立即失败

public static final String checkInput(final String answers) {
    if (answers==null || answers.length() != ANSWER_LENGTH)
        return "ERR!"; // fail fast
    if(!answer.matches("[AB]*")) 
       return "ERR!"; // fail fast
    return "";
}

一个快速的观察是,您不需要计数变量。您可以比较答案。长度()==答案长度。首先进行比较。在for循环之前。这样就可以避免这种情况下不必要的循环。字符串上是否有其他信息,如字符串中的A和B的数字?可能是字符串。匹配(“[AB]*”)帮助您可以在发现第一个错误后立即检查字符串长度,并将其从循环中打断。@Dongqing字符串中的所有字母都必须是A或BA快速观察您不需要计数变量。您可以比较答案。长度()==答案长度。首先进行比较。在for循环之前。这样就可以避免这种情况下不必要的循环。字符串上是否有其他信息,如字符串中的A和B的数量?可能是字符串。匹配(“[AB]*”)帮助您可以检查字符串长度,并在发现第一个错误后立即中断循环。@Dongqing字符串中的所有字母都必须是A或B