java替换文本相关问题

公子LV 2017-07-19 07:34:16
题目:
编写一个JAVA程序,将次行块风格的代码转换成行尾块风格
代码如下:

public static void main(String[] args) throws IOException {
File file = new File("Score.java");
if(!file.exists()){
System.out.println("File does not exists");
System.exit(1);
}
Scanner input = new Scanner(file); //创建输入输出
PrintWriter output = new PrintWriter(file);

StringBuilder code = new StringBuilder();
while(input.hasNext()){
System.out.println(1);
String line = input.nextLine();
String line2=line.trim();
if(line2.charAt(0)=='{'){
code.append(" {");
}else{
code.append("\r\n"+line);
}
}
input.close();


output.println(code);
output.close();


}


问题是:这样写代码while(){}块内语句不执行,而如果将input关闭之后再创建文件输出,则能正常进行。代码如下:

public static void main(String[] args) throws IOException {
File file = new File("Score.java");
if(!file.exists()){
System.out.println("File does not exists");
System.exit(1);
}
Scanner input = new Scanner(file);
StringBuilder code = new StringBuilder();
while(input.hasNext()){
System.out.println(1);
String line = input.nextLine();
String line2=line.trim();
if(line2.charAt(0)=='{'){
code.append(" {");
}else{
code.append("\r\n"+line);
}
}
input.close();

PrintWriter output = new PrintWriter(file);
output.println(code);
output.close();


}

这是为什么?
我看的《Java语言程序设计》这本书,上面代码就是创建完文件输入立刻创建文件输出的。
...全文
162 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
soton_dolphin 2017-07-19
  • 打赏
  • 举报
回复

public class EditFile {
    public static void main(String[] args) throws IOException{
        Deque<String> originalCodes = Files.lines(Paths.get("/Users/max/Documents/bells.java"))
                                    .collect(Collectors.toCollection(ArrayDeque::new));

        Deque<String> modifiedCodes = new ArrayDeque<>();
        String line;
        boolean flag = false;
        while((line = originalCodes.pollLast()) != null ){
            if(line.trim().startsWith("{")){
                flag = true;
                continue;
            }
            modifiedCodes.push(flag? line + "{\n" : line);
            flag = false;
        }

        try(BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/max/Documents/bells_new.java"))){
            while((line =modifiedCodes.pollFirst())!=null){
                bw.write(line + "\n");
            }
            bw.flush();
        }
    }
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧