2011-12-14 20 views
11

Vi this respuesta de cómo unir Cadena [] a cadena separada por comas.Unir coma si no está vacío o nulo

Sin embargo, necesito la utilidad para unir la cadena en la matriz solo si los valores no están vacíos.

¿Cuál es la mejor manera de hacerlo? sin bucle antes en la cadena [] para eliminar. Prefiero un método que hace ambas cosas.

EDITADO

por ejemplo:

I, love, , u 

habrá:

I love u 
+0

¿Cómo se puede hacer eso sin un bucle? ¿O quiere decir sin * usted * haciendo el ciclo? – LuckyLuke

+0

Internamente, cualquier Utilidad de terceros que elija utilizará el bucle –

+0

¿Ha probado StringUtils.join como se menciona en la pregunta vinculada? También debería manejar el caso de una matriz vacía de alguna manera ... si no, siempre puedes construir una cláusula 'if (givenStringArray.length> 0) {...}' a su alrededor, ¿verdad? – codeling

Respuesta

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: Lo siento por el uso de la? operador: tuve que hacerlo rápido, estoy en el trabajo. :)

2

¿Por qué no simplemente bucle en serie y utilizar StringBuilder para construir cadena separada por comas para no nula solo valores

2

¿Algún problema con la comprobación de vacío/nulo?

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

La respuesta que señaló que ya lo hace la unión usando StringUtils.join

Su requisito no encaja con eso, pero es tan simple que parece mejor poner en práctica su propia combinación de bucle, por ejemplo,

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

Bueno, lo sabía pero quería ver si había algo escrito – Dejell

-3

Jakarta StringUtils lo hace. Aquí está el código de allí:

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

Comprueba si la cadena es nula, pero no si los valores de la cadena [] están vacíos o nulos – Dejell

22

En Java 8 se puede utilizar Stream:

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

El flujo también se puede crear con 'Stream.of (T ... values)'. – mlemler

0

Sin API o biblioteca, que podría unirse a no esté en blanco, no nulo gama cadena de la siguiente manera:

método definido por el usuario:

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 
} 

Llamando al método definido por el usuario:

String s[] = {" ","abc", "", "XYZ", "  ", null, "123", null}; 
String joinVal = joinNonBlankStringArray(s, ",");// "abc,XYZ,123" 
Cuestiones relacionadas