(我不知道如何比较字符串)用while循环写入文件

时间:2014-12-13 16:06:20

标签: java string

我对这个程序的意图是创建一个简单的程序,逐行接收来自终端的输入,并以相同的方式将其存储到文件中,当用户输入“end”时结束。

我很困惑为什么...... 1)当用户输入“结束”时,while循环不会结束 2)数据没有写入文件(我已经检查过,它不是出于任何原因)

编辑:答案已经找到了!对于那些刚到的人,我的条件应该是!temp.equals(“end”)

public static void main(String[] args) throws IOException{

    Scanner in = new Scanner(System.in);

    System.out.println("Type in data and it will be written to a file");
    System.out.println("filename = blah.txt");

    String temp, filename="blah.txt";

    PrintWriter outfile = new PrintWriter(new FileWriter(filename));

    System.out.println("enter next line... \"end\" to exit");
    temp=in.nextLine();
    while(temp!="end"){
        outfile.println(temp);
        System.out.println("enter next line... \"end\" to exit");
        temp=in.nextLine();
    }

    outfile.close();
}

3 个答案:

答案 0 :(得分:2)

使用equals代替

temp!="end" // temp.equals("end")

在关闭之前刷新输出流,因为默认情况下创建的PrintWriter对象没有自动行刷新。因此

outfile.flush()

或者当您创建PrintWriter对象时,请将true作为第二个参数传递,如此

PrintWriter outfile = new PrintWriter(new FileWriter(filename), true);

答案 1 :(得分:0)

检查2个字符串是否相等时使用equals方法,即temp.equals("end") 这就是你的while循环没有结束的原因

答案 2 :(得分:0)

while循环不会结束,因为您要将引用类型相互比较,而不是String的值。这意味着,

while( temp != "end" )

检查String中存储的temp的引用是否等于"end"的引用。因此,比较看起来有点像

java.lang.String@549f9afb != java.lang.String@583dad65

始终评估为true

为了比较两个String个对象的值,您需要在一个equals上调用String。所以在你的情况下,必须写:

while ( temp.equals( "end" ) )

PrintWriter不会立即写入收到的输出,而是将其存储直到刷新为止。通过激活autoFlush,每次调用println后都会刷新PrintWriter。可以激活它来设置构造函数的autoFlush参数。

PrintWriter outfile = 
    new PrintWriter( new FileWriter( filename ), true );