Groovy println将空字符串打印到控制台而不是正确的字符串

时间:2016-06-03 18:58:39

标签: gradle groovy

我解析测试的输出我是作为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不是空字符串,因为如果它的第一个字符为空,它就不会超过布尔条件。

1 个答案:

答案 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

中分隔成一个字符串数组