如何实现输入*保存文件并退出?基于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
相关产品推荐
相关产品推荐

