我想读取一个数据流,每当它读取某个单词或短语时,我希望计数值上升。我在下面的例子没有计算它。我也试着寻找“回声百分比”。所有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));
答案 0 :(得分:1)
DataInputStream.readLine
已弃用。请改用BufferedReader
及其readLine
方法或Scanner
和nextLine
。另外,使用.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);
注意括号会改变。
请查看以下内容以获取更多解释: