You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现输入*保存文件并退出?基于PrintWriter类的Scanner输入问题

问题解决:输入*后程序无法触发保存提示的修复方案

嘿,我发现你代码里的问题啦!核心原因出在字符串比较的方式上,Java里可不能用!=来判断两个字符串内容是否相等哦。

问题根源

你原来的循环条件是:

while((text=input.nextLine()) != "*")

这里的!=是在比较两个String对象的内存引用地址,而不是它们的实际内容。当你输入*的时候,input.nextLine()会创建一个新的String对象,它和字面量"*"的引用地址不一样,所以这个条件会一直返回true,循环永远停不下来,后面的保存提示自然就不会执行啦。

修复后的完整代码

我帮你调整了代码,不仅解决了这个问题,还优化了逻辑和资源管理:

import java.io.PrintWriter;
import java.io.IOException;
import java.util.Scanner;
import static java.lang.System.in;
import static java.lang.System.out;

class PrintWrit1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(in);
        out.print("Enter the filename :\t");
        String filename = input.nextLine();
        
        try( PrintWriter pw = new PrintWriter(filename)) {
            out.println("Enter the file content, enter * after finishing");
            String text;
            
            // 改用无限循环+break的逻辑,先读取再判断,更清晰
            while(true) {
                text = input.nextLine();
                // 用字面量调用equals,既比较内容又避免空指针
                if("*".equals(text)) {
                    break;
                }
                pw.println(text);
            }
            
            out.println(filename+" is saved and closed");
        } catch(IOException ioe) {
            ioe.printStackTrace();
        } finally {
            // 显式关闭Scanner资源,养成良好编程习惯
            input.close();
        }
    }
}

关键修改点说明

  • 字符串比较方式:把!=换成"*".equals(text),这样会真正比较两个字符串的内容,而不是引用地址。用字面量调用equals还能避免如果text为null时的空指针异常(虽然这里输入不会出现null,但这是值得养成的好习惯)。
  • 循环逻辑优化:改成先读取输入,再判断是否终止的结构,比原来把赋值和判断写在一行的方式可读性更强,逻辑也更直观。
  • 资源管理:添加了finally块来关闭Scanner,虽然JVM会自动回收资源,但显式关闭IO资源是专业的做法。

现在你再运行代码,输入*之后,程序就会正常退出循环,打印出文件保存关闭的提示啦!

内容的提问来源于stack exchange,提问作者Sai Kiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:25:55