我解析测试的输出我是作为Gradle JavaExec任务运行的。我想过滤输出,以便只在stdout中显示错误(我从Windows命令行运行任务)。
在doLast{}
块中,我已将OutputStream解析为字符串列表,其中每个条目都是一行:
ByteArrayOutputStream baos = new ByteArrayOutputStream()
String log = baos.toString()
List<String> logLines
logLines = new ArrayList<String>(Arrays.asList(log.split('\n')))
然后遍历列表,打印以&#39; E&#39;开头的每一行。 (对于错误):
for (String entry : logLines){
if (entry.charAt(0) == 'E'){
println "First char == E"
println (entry)
}
}
println "Execution complete!"
我的输出打印出前两个错误,但打印所有其余错误的空字符串:
First char == E
ERROR More info here
First char == E
ERROR More info here
First char == E
First char == E
First char == E
Execution complete!
为什么println(entry)
会打印空字符串?显然entry
不是空字符串,因为如果它的第一个字符为空,它就不会超过布尔条件。
答案 0 :(得分:0)
@Roman得到了答案:import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.io.IOException;
public class DialogDisplayApp extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"add-dialog.fxml"
)
);
stage.setScene(new Scene(new VBox(new Label("Main Window")), 600, 400));
stage.show();
Dialog<String> dialog = loader.load();
dialog.initOwner(stage);
dialog.showAndWait();
System.out.println(dialog.getResult());
}
public static void main(String[] args) {
launch(args);
}
}
显示除了新行\ n之外还使用了回车符\ r。因此解决方案是通过正则表达式'[\ r \ n] +'进行拆分,它将在每个\ n或\ r \ n