convertir array java list stringbuffer

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.