2011-12-14 32 views
11

Tôi đã thấy this câu trả lời về cách tham gia Chuỗi [] với chuỗi được phân tách bằng dấu phẩy.Tham gia dấu phẩy nếu không trống hoặc không rỗng

Tuy nhiên tôi cần tiện ích để tham gia chuỗi trong mảng chỉ nếu các giá trị không trống.

Cách tốt nhất để làm điều đó là gì? mà không lặp trước trên String [] để loại bỏ. Tôi thích một phương pháp làm cả hai.

EDITED

ví dụ:

I, love, , u 

sẽ là:

I love u 
+0

Làm thế nào bạn có thể làm điều đó mà không có một vòng lặp? Hoặc bạn có nghĩa là nếu không có * bạn * làm cho vòng lặp? – LuckyLuke

+0

Bên trong bất kỳ Tiện ích của bên thứ ba nào bạn chọn sẽ sử dụng vòng lặp –

+0

Bạn đã thử StringUtils.join như đã đề cập trong câu hỏi được liên kết chưa? Nó cũng sẽ xử lý trường hợp của một mảng rỗng bằng cách nào đó ... nếu không bạn luôn có thể xây dựng một mệnh đề 'if (givenStringArray.length> 0) {...}' xung quanh nó, phải không? – codeling

Trả lời

1
public class So20111214a { 
    public static String join(String[] argStrings) { 
     if (argStrings == null) { 
      return ""; 
     } 
     String ret = ""; 
     if (argStrings.length > 0) { 
      ret = argStrings[0]; 
     } // if 
     for (int i = 1; i<argStrings.length; i++) { 
      ret += (argStrings[i] == null) 
        ? "" 
        : (argStrings[i].isEmpty() 
         ? "" 
         : ("," + argStrings[i])); 
     } // for 
     return ret; 
    } // join() method 

    public static void main(String[] args) { 
     String[] grandmasters = { 
      "Emanuel Lasker", 
      "José Raúl Capablanca", 
      "Alexander Alekhine", 
      "Siegbert Tarrasch", 
      "Frank Marshall" 
     }; 
     String[] s1 = null; 
     String[] s2 = {}; 
     String[] s3 = { "Mikhail Botvinnik" }; 
     System.out.println(join(s1)); 
     System.out.println(join(s2)); 
     System.out.println(join(s3)); 
     System.out.println(join(grandmasters)); 
     System.out.println(join(new String[]{"I", "love", "", null, "u!"})); 
    } // main() method 

    /* output: 
    <empty string> 
    <empty string> 
    Mikhail Botvinnik 
    Emanuel Lasker,José Raúl Capablanca,Alexander Alekhine,Siegbert Tarrasch,Frank Marshall 
    I,love,u! 
    */ 

} // So20111214a class 

PS: Xin lỗi vì sử dụng? nhà điều hành - Tôi phải làm điều đó một cách nhanh chóng, tôi đang làm việc. :)

2

Tại sao không chỉ đơn giản là vòng lặp trên mảng và sử dụng StringBuilder để xây dựng dấu phẩy tách chuỗi cho không null chỉ các giá trị.

2

Bất kỳ vấn đề nào với việc kiểm tra trống/rỗng?

String[] values = ?; 
if (values != null && values.length > 0) { 
    // join 
} 

Câu trả lời bạn chỉ vào đã nào tham gia sử dụng StringUtils.join

yêu cầu của bạn không hoàn toàn phù hợp với điều đó, nhưng nó là đơn giản như vậy mà có vẻ như tốt nhất để thực hiện vòng lặp tham gia của riêng bạn, ví dụ

StringBuilder sb = new StringBuilder(); 
    boolean first = true; 
    for (String word: words) { 
     if (word != null && (word = word.trim()).length() > 0) { 
      if (first) { 
       first = false; 
      } else { 
       sb.append(','); 
      } 
      sb.append(word); 
     } 
    } 
+0

Vâng, tôi biết điều đó nhưng muốn xem nếu có gì đó đã được viết – Dejell

-3

Jakarta StringUtils làm điều đó. Đây là mã từ đó:

public static String join(Object[] array, String separator) { 
    if (array == null) { 
     return null; 
    } 
    return join(array, separator, 0, array.length); 
} 
+3

Nó sẽ kiểm tra xem chuỗi có null hay không, nhưng không nếu các giá trị của chuỗi [] trống hoặc không – Dejell

22

Trong Java 8 bạn có thể sử dụng Suối:

List<String> list = Arrays.asList("I", " ", "love", null, "you"); 
    String message = list.stream().filter(StringUtils::isNotBlank) 
        .collect(Collectors.joining(", ")); 
    System.out.println("message = " + message); 
+5

Luồng cũng có thể được tạo bởi 'Stream.of (T ... values)'. – mlemler

0

Nếu không có bất kỳ API hoặc thư viện, chúng ta có thể tham gia phi trống, không null mảng chuỗi như sau:

Phương thức do người dùng xác định:

public String joinNonBlankStringArray(String s[], String separator) { 
    StringBuilder sb = new StringBuilder(); 
    if (s != null && s.length > 0) { 
     for (String w : s) { 
      if (w != null && !w.trim().isEmpty()) { 
       sb.append(w); 
       sb.append(separator); 
      } 
     } 
    } 
    return sb.substring(0, sb.length() - 1);// length() - 1 to cut-down last extra separator 
} 

Calling người dùng định nghĩa phương pháp:

String s[] = {" ","abc", "", "XYZ", "  ", null, "123", null}; 
String joinVal = joinNonBlankStringArray(s, ",");// "abc,XYZ,123" 
Các vấn đề liên quan