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.