【问题标题】: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

【问题讨论】:

  • 使用 String.trim()

标签: 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);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-03-04
            • 2020-03-29
            • 1970-01-01
            • 2021-05-12
            • 1970-01-01
            • 2015-08-23
            • 2018-07-10
            • 2017-10-26
            相关资源
            最近更新 更多