array - Conversión de matriz de caracteres a lista en Java
convertir arraylist a array java (5)
Ahora publicaré esta respuesta como una opción más para todos aquellos desarrolladores a los que no se les permite usar ninguna biblioteca pero SÓLO el poder de Java 8 :)
char[] myCharArray = { ''H'', ''e'', ''l'', ''l'', ''o'', ''-'', ''X'', ''o'', ''c'', ''e'' };
Stream<Character> myStreamOfCharacters = IntStream
.range(0, myCharArray.length)
.mapToObj(i -> myCharArray[i]);
List<Character> myListOfCharacters = myStreamOfCharacters.collect(Collectors.toList());
myListOfCharacters.forEach(System.out::println);
¿Puede alguien ayudarme y decir cómo convertir una matriz de caracteres a una lista y viceversa? Estoy tratando de escribir un programa en el que los usuarios ingresen una cadena (por ejemplo, "Mike is good"
) y en la salida, cada espacio en blanco se reemplaza por "%20"
(es decir, "Mike%20is%20good"
). Aunque esto se puede hacer de muchas maneras, pero como la inserción y eliminación toman O (1) tiempo en la lista enlazada, pensé en intentarlo con una lista enlazada. Estoy buscando alguna forma de convertir una matriz de caracteres en una lista, actualizar la lista y luego volver a convertirla.
public class apples
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
StringBuffer sb = new StringBuffer(input.nextLine());
String s = sb.toString();
char[] c = s.toCharArray();
//LinkedList<char> l = new LinkedList<char>(Arrays.asList(c));
/* giving error "Syntax error on token " char",
Dimensions expected after this token"*/
}
}
Entonces, en este programa, el usuario ingresa la cadena, que estoy almacenando en un StringBuffer
, que primero estoy convirtiendo en una cadena y luego en una matriz char
, pero no puedo obtener una lista l
de s
.
Le agradecería mucho si alguien pudiera indicar la forma correcta de convertir la matriz char
a una lista y viceversa.
Como char es de tipo primitivo, Arrays.asList(char[])
estándar Arrays.asList(char[])
no funcionará. Producirá List<char[]>
en lugar de List<Character>
... así que lo que queda es iterar sobre la matriz y rellenar una nueva lista con los datos de esa matriz:
public static void main(String[] args) {
String s = "asdasdasda";
char[] chars = s.toCharArray();
// List<Character> list = Arrays.asList(chars); // this does not compile,
List<char[]> asList = Arrays.asList(chars); // because this DOES compile.
List<Character> listC = new ArrayList<Character>();
for (char c : chars) {
listC.add(c);
}
}
Y así es como se convierte la Lista de nuevo a la matriz:
Character[] array = listC.toArray(new Character[listC.size()]);
Lo curioso es por qué List<char[]> asList = Arrays.asList(chars);
hace lo que hace: asList
puede tomar array o vararg . En este caso char [] chars
se consideran como un solo valor vararg de char[]
! Así que también puedes escribir algo como
List<char[]> asList = Arrays.asList(chars, new char[1]);
:)
En Java 8, el método CharSequence::chars
proporciona una forma de una línea para convertir una String
en la List<Character>
:
myString.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
Y si necesita convertir char[]
a List<Character>
, primero debe crear una String
partir de ella y luego aplicar la solución anterior. Aunque no será muy fácil de leer y bonito, será bastante corto.
No puedes usar genéricos en java con tipos primitivos, why?
Si realmente desea convertir a la Lista y volver a la matriz, entonces el enfoque de dantuch es el correcto.
Pero si solo quieres hacer el reemplazo, existen métodos (a saber, replaceAll java.lang.String
) que pueden hacerlo por ti.
private static String replaceWhitespaces(String string, String replacement) {
return string != null ? string.replaceAll("//s", replacement) : null;
}
Puedes usarlo así:
StringBuffer s = new StringBuffer("Mike is good");
System.out.println(replaceWhitespaces(s.toString(), "%20"));
Salida:
Mike%20is%20good
Otra forma de usar un bucle sería usar el método Chars.asList() Guava . Entonces el código para convertir una cadena en una lista de caracteres vinculada es simplemente:
LinkedList<Character> characterList = new LinkedList<Character>(Chars.asList(string.toCharArray()));
O, de una manera más guayaba:
LinkedList<Character> characterList = Lists.newLinkedList(Chars.asList(string.toCharArray()));
La biblioteca de Guayaba contiene muchas cosas buenas, por lo que vale la pena incluirla en su proyecto.