对于循环仅循环1次JAVA?

cch*_*hua 3 java loops for-loop

我有一个for循环方法的问题,只有循环1次是什么问题?在数组中没有任何问题,它能够打印我想要的值.

这是我的代码:

public static void main(String[] args){

        String s = "Apple0, Apple1, Apple2, Apple3, Apple4";
        String[] word = s.split(",");
        StringBuffer str = new StringBuffer();
        Integer total = 0;

        for (int y = 0; y < word.length; y++){
            if(word[y].toString().equals("Apple2") ){
                total++;
                //str.append(word[y].toString());
            }else if(word[y].toString().equals("Apple3") ){
                total++;
                //str.append(word[y].toString());
            }else if(word[y].toString().equals("Apple4") ){
                total++;
                //str.append(word[y].toString());
            }
            else if(word[y].toString().equals("Apple1") ){
                total++;
                //str.append(word[y].toString());
            }


    }
        System.out.println( word[0] + word[1] + word[2] +  word[3] + word[4] + word.length);
        System.out.println(str + "hihi" + total);

}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 6

其他人已经找到了问题的原因.但是,他们提出的解决方案太具体了......而且很脆弱.(拆分split("\\s*,\\s*")更好但不会处理整个字符串开头/结尾的空格.)

我建议你继续使用split(","),但在测试之前修剪一下; 例如

  for (int y = 0; y < word.length; y++) {
        String trimmed = word[y].trim();
        if (trimmed.equals("Apple2")) {
            total++;
            //str.append(trimmed.toString());
        } else if (trimmed.equals("Apple3")) {
            // etcetera
Run Code Online (Sandbox Code Playgroud)

或者更好的是:

  String[] words = s.split(",");
  for (String word : words) {
        String trimmed = word.trim();
        if (trimmed.equals("Apple2")) {
            total++;
            //str.append(trimmed.toString());
        } else if (trimmed.equals("Apple3")) {
            // etcetera
Run Code Online (Sandbox Code Playgroud)

这将使您的代码工作,无论逗号周围的空格字符以及字符串的开头和结尾.坚固性是好的,特别是如果它几乎没有任何实施成本.

最后,你甚至可以用Java 7 String switch语句替换if/else if/... stuff.