【问题标题】:how can we use for each loops for string array to print only non empty elements我们如何使用字符串数组的每个循环来仅打印非空元素
【发布时间】:2021-09-08 01:22:48
【问题描述】:
我希望每个都遍历字符串数组的所有元素并仅打印所有非空元素
String[] arr = {"one"," two"," "," four"};
for (String x:arr) {
boolean i = x.startsWith(" ");
if (i==false) {
System.out.println(x);
}
}
我需要输出为:
one
two
four
【问题讨论】:
标签:
java
arrays
string
for-loop
【解决方案1】:
startsWith(" ") 只会匹配以空格开头的字符串。这样做的问题是您会错过没有任何空格的字符串(例如“”),并且您将忽略不为空但以空格开头的字符串(例如“五”)。
你应该先用trim()去掉多余的空格,然后用isEmpty()方法检查字符串是否完全为空。
if (!x.trim().isEmpty()) { // assuming x is never null
System.out.println(x);
}
【解决方案2】:
这可能会有所帮助
Arrays.stream(arr).filter(s -> !s.trim().isEmpty()).forEach(System.out::println);
【解决方案3】:
在 trim() 之后检查字符串是否为空
for(String x:arr){
if(!x.trim().isEmtpty()){
System.out.println(x);
}
}
【解决方案4】:
首先修剪所有前导或尾随空格,然后检查字符串是否为空,如下所示:
java 字符串trim() 方法消除了前导和尾随空格。
例如,对于字符串 str = five ,str.trim() 将在删除前导和尾随空格后返回 five。
isEmpty() 会检查字符串是否为空。
String[] arr = {"one","two"," ","four"};
for (String x : arr) {
boolean empty = x.trim().isEmpty();
if ( !empty ) {
System.out.println(x);
}
}
【解决方案5】:
您可以使用 String#isBlank,前提是您有 java 11 或更高版本。您可以根据需要修改一些方法:
String[] arr = {"one"," two"," "," four"};
for (String x:arr) {
if (!x.isBlank()) {
System.out.println(x);
}
}
或将您的数组转换为列表
String[] arr = {"one"," two"," "," four"};
Arrays.asList(arr).forEach(str -> {
if(!str.isBlank()){
System.out.println(str);
}
});
或使用流并过滤空白流
String[] arr = {"one"," two"," "," four"};
Arrays.stream(arr)
.filter(Predicate.not(String::isBlank))
.forEach(System.out::println);