读取输入流并使用if语句来比较输出

时间:2012-09-05 15:04:43

标签: java

我想读取一个数据流,每当它读取某个单词或短语时,我希望计数值上升。我在下面的例子没有计算它。我也试着寻找“回声百分比”。所有bat文件都是echo百分比。

try { 
    String ls_str;
    String percent = "percent";
    Process ls_proc = Runtime.getRuntime().exec("c:\\temp\\percenttest.bat"); 
    // get its output (your input) stream    
    DataInputStream ls_in = new DataInputStream(ls_proc.getInputStream()); 
    while ((ls_str = ls_in.readLine()) != null ) { 
        System.out.println(ls_str);
        progressBar.setValue(progress);
        taskOutput.append(String.format(ls_str+"\n", progress));
        if (ls_str == percent)  {
            progress++;   
        } 
    }
} catch (IOException e1) { 
    System.out.println(e1.toString());                 
    e1.printStackTrace();
}

setProgress(Math.min(progress, 100));   

2 个答案:

答案 0 :(得分:1)

DataInputStream.readLine已弃用。请改用BufferedReader及其readLine方法或ScannernextLine。另外,使用.equals来比较两个字符串,而不是==

==比较仅进行参考比较,询问问题“这两个字符串是否在内存中的相同位置?”通常,答案是“不”。另一方面,equals提出问题,“这两个字符串中的字符是否相同?”这称为深度比较,==运算符不执行更深入的比较。

答案 1 :(得分:0)

请勿将字符串与==进行比较,请使用equals方法。

如果您将字符串与==进行比较,则会检查它们是否相同String

如果您将它们与equals进行比较,则会检查其内容是否相同。

而不是:

if (ls_str == percent)

这样做:

if (ls_str.equals(percent))

如果你想忽略大小写,你可以这样做:

if (ls_str.equalsIgnoreCase(percent))


修改

你的String格式也搞砸了。

变化:

taskOutput.append(String.format( ls_str+"\n", progress));

为:

taskOutput.append(String.format( ls_str+"\n"), progress);

注意括号会改变。


请查看以下内容以获取更多解释:

Java String.equals versus ==

http://www.java-samples.com/showtutorial.php?tutorialid=221