是否有更有效的方法来迭代字符串,直到达到某个字符?

时间:2015-03-26 05:02:27

标签: java string

在这种方法中,我试图通过一个由70个字符组成的字符串,直到我找到一封不是' A'或者是' B'一旦我找到了一个不属于的角色,我应该返回" ERR!&#34 ;;如果字符串长度不是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;
   }  

我的代码完美无缺,但是如果有任何可以缩短或简化的内容来减少程序中的行数,那就是我需要的。任何想法/提示都表示赞赏!!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

这样,如果有除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 "";
}

答案 2 :(得分:1)

行数(或行代码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 "";
}