【问题标题】:String processing using scanner使用扫描仪处理字符串
【发布时间】:2012-05-21 19:11:38
【问题描述】:

问题:编写一个名为 wordWrap 的方法,该方法接受一个代表输入文件的 Scanner 作为其参数,并将文件的每一行输出到控制台,对所有长度超过 60 个字符的行进行自动换行。例如,如果一行包含 112 个字符,则该方法应将其替换为两行:一行包含前 60 个字符,另一行包含最后 52 个字符。包含 217 个字符的行应分成四行:长度为 60 的三行和长度为 37 的最后一行。

我的代码:

public void wordWrap(Scanner input) {

    while(input.hasNextLine()){
        String line=input.nextLine();
        Scanner scan=new Scanner(line);
        if(scan.hasNext()){
            superOuter:
            while(line.length()>0){

                for(int i=0;i<line.length();i++){
                    if( i<60 && line.length()>59){
                        System.out.print(line.charAt(i));

                    }
                    //FINISH OFF LINE<=60 characters here

                    else if(line.length()<59){

                        for(int j=0;j<line.length();j++){
                            System.out.print(line.charAt(j));

                        }
                        System.out.println();

                        break superOuter;
                    }
                    else{
                        System.out.println();

                        line=line.substring(i);

                        break ;
                    }


                }

            }
        }
        else{
            System.out.println();
        }

    }
}

输出中的问题:

预期输出:

你好 你好吗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 我很好 谢谢 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 这一行正好有六十个字符长;很有意思! 再见

产生的输出:

你好 你好吗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 我很好 谢谢 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色 狐狸跳过懒狗 这一行正好有六十个字符长;多么有趣!这一行正好有六十个字符;多么有趣!这一行正好有六十个字符;很有意思!... *** 错误:第 13 行输出过多

我哪里做错了???

【问题讨论】:

  • 循环输入的行(扫描仪)不是更容易吗,检查它是否超过 60 个字符,打印前 60 个(或更少),从 char 60 中获取子字符串到最后,然后重复直到长度为 0?

标签: java


【解决方案1】:

else 条件中(正好是 60 个字符的行),您只是从内部 for 循环中断,而您想从外部 while 循环中断(因此,您最终会写出同一行 60 次)。

使用 break superOuter 代替少于 59 个字符的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2012-08-13
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多