texto - pasar cadena a array java
Java: agregar citas a cadenas en una matriz y unir cadenas en una matriz (7)
Con Java 8+
Java 8 tiene Collectors.joining()
y sus sobrecargas. También tiene String.join
.
Usando un Stream
y un Collector
Con una función reutilizable.
Function<String,String> addQuotes = s -> "/"" + s + "/"";
String result = listOfStrings.stream()
.map(addQuotes)
.collect(Collectors.joining(", "));
Sin ninguna función reutilizable.
String result = listOfStrings.stream()
.map(s -> "/"" + s + "/"")
.collect(Collectors.joining(", "));
Más corto (aunque un poco hackish)
String result = listOfStrings.stream()
.collect(Collectors.joining("/", /"", "/"", "/""));
Usando String.join
Muy hackish. No utilice excepto en un método llamado wrapWithQuotesAndJoin
.
String result = listOfString.isEmpty() ? "" : "/"" + String.join("/", /"", listOfStrings) + "/"";
Con versiones anteriores de Java.
Hazte un favor y utiliza una biblioteca. Guava viene inmediatamente a la mente.
Usando guayaba
Function<String,String> addQuotes = new Function<String,String>() {
@Override public String apply(String s) {
return new StringBuilder(s.length()+2).append(''"'').append(s).append(''"'').toString();
}
};
String result = Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
No bibliotecas
String result;
if (listOfStrings.isEmpty()) {
result = "";
} else {
StringBuilder sb = new StringBuilder();
Iterator<String> it = listOfStrings.iterator();
sb.append(''"'').append(it.next()).append(''"''); // Not empty
while (it.hasNext()) {
sb.append(", /"").append(it.next()).append(''"'');
}
result = sb.toString();
}
Nota : todas las soluciones suponen que listOfStrings
es una List<String>
lugar de una String[]
. Puede convertir una String[]
en una List<String>
usando Arrays.asList(arrayOfStrings)
. Puede obtener un Stream<String>
directamente de una String[]
usando Arrays.stream(arrayOfString)
.
Me gustaría añadir comillas dobles a las cadenas en una matriz y luego unirlas como una sola cadena (conservando las comillas). ¿Hay alguna biblioteca de cadenas que hace esto? He probado Apache commons StringUtils.join y la clase Joiner en Google guava pero no pude encontrar nada que agregue comillas dobles.
Mi entrada sería una matriz como se menciona a continuación:
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
La salida requerida debe ser como se menciona a continuación:
String output = "/"day/", /"campaign/", /"imps/", /"conversions/"";
Sé que puedo recorrer la matriz y añadir citas. Pero me gustaría una solución más limpia si hay una.
Agregue las comillas junto con el separador y luego agregue las comillas al frente y atrás.
"/"" + Joiner.on("/",/"").join(values) + "/""
No hay ningún método presente en JDK que pueda hacer esto, pero puede usar la clase StringUtls Apache Commons Langs , StringUtils.join()
funcionará
También puedes crear el código para esta funcionalidad:
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
{
listOfStrings[i] = "/"" + listOfStrings[i] + "/"";
output += listOfStrings[i] + ", ";
}
Una forma más genérica sería algo. me gusta:
private static class QuoteFunction<F> {
char quote;
public QuoteFunction(char quote) {
super();
this.quote = quote;
}
Function<F, String> func = new Function<F,String>() {
@Override
public String apply(F s) {
return new StringBuilder(s.toString().length()+2).append(quote).append(s).append(quote).toString();
}
};
public Function<F, String> getFunction() {
return func;
}
}
... llámalo a través de la siguiente función
public static <F> String asString(Iterable<F> lst, String delimiter, Character quote) {
QuoteFunction<F> quoteFunc = new QuoteFunction<F>(quote);
Joiner joiner = Joiner.on(delimiter).skipNulls();
return joiner.join(Iterables.transform(lst, quoteFunc.getFunction()));
}
String output = "/"" + StringUtils.join(listOfStrings , "/",/"") + "/"";
public static void main(String[] args) {
// TODO code application logic here
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
String output = "";
for (int i = 0; i < listOfStrings.length; i++) {
output += "/"" + listOfStrings[i] + "/"";
if (i != listOfStrings.length - 1) {
output += ", ";
}
}
System.out.println(output);
}
Salida: "día", "campaña", "imps", "conversiones"