Char array to arraylist java

Преобразование Char массива в список на Java

Может ли кто-нибудь помочь мне и сообщить, как преобразовать массив char в список и наоборот. Я пытаюсь написать программу, в которой пользователи вводят строку (например, «Mike is good» ), а на выходе каждый пробел заменяется на «%20» (I.e «Mike%20is%20good» ). Хотя это можно сделать разными способами, но поскольку вставка и удаление принимают O (1) время в связанном списке, я думал попробовать его со связанным списком. Я ищу способ преобразования массива char в список, обновления списка и последующего его преобразования.

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(); //LinkedListl = new LinkedList(Arrays.asList(c)); /* giving error "Syntax error on token " char", Dimensions expected after this token"*/ > > 

Итак, в этой программе пользователь вводит строку, которую я сохраняю в StringBuffer , которую я сначала конвертирую в строку, а затем в массив char , но я не могу получить список l из s .

Буду очень признателен, если кто-то может рассказать правильный способ преобразования массива char в список, а также наоборот.

ОТВЕТЫ

Ответ 1

В Java 8 и выше вы можете использовать метод String chars() :

myString.chars().mapToObj(c -> (char) c).collect(Collectors.toList()); 

И если вам нужно конвертировать char[] в List , вы можете сначала создать String из него, а затем применить вышеуказанное решение. Хотя он не будет очень читабельным и красивым, он будет довольно коротким.

Ответ 2

Поскольку char является примитивным типом, стандартный Arrays.asList(char[]) не будет работать. Он будет создавать List вместо List . так что осталось перебрать массив и заполнить новый список данными из этого массива:

 public static void main(String[] args) < String s = "asdasdasda"; char[] chars = s.toCharArray(); // Listlist = Arrays.asList(chars); // this does not compile, List asList = Arrays.asList(chars); // because this DOES compile. List listC = new ArrayList(); for (char c : chars) < listC.add(c); >> 

И вот как вы конвертируете List в массив:

 Character[] array = listC.toArray(new Character[listC.size()]); 

на
Забавно, почему List asList = Arrays.asList(chars); делает то, что он делает: asList может принимать массив или vararg. В этом случае char [] chars рассматривается как однозначный vararg char[] ! Таким образом, вы также можете написать что-то вроде

List asList = Arrays.asList(chars, new char[1]); 🙂

Ответ 3

Другой способ, чем использование цикла, заключается в использовании метода GuavaChars.asList(). Тогда код для преобразования String в LinkedList of Character просто:

LinkedList characterList = new LinkedList(Chars.asList(string.toCharArray())); 
LinkedList characterList = Lists.newLinkedList(Chars.asList(string.toCharArray())); 

Библиотека Guava содержит много хороших вещей, поэтому стоит включить ее в свой проект.

Ответ 4

Теперь я отправлю этот ответ как еще один вариант для всех тех разработчиков, которым не разрешено использовать какую-либо библиотеку, но ТОЛЬКО Сила java 8:)

char[] myCharArray = < 'H', 'e', 'l', 'l', 'o', '-', 'X', 'o', 'c', 'e' >; Stream myStreamOfCharacters = IntStream .range(0, myCharArray.length) .mapToObj(i -> myCharArray[i]); List myListOfCharacters = myStreamOfCharacters.collect(Collectors.toList()); myListOfCharacters.forEach(System.out::println); 

Ответ 5

Вы не можете использовать generics в java с примитивными типами, почему?

Если вы действительно хотите конвертировать в List и обратно в массив, тогда подход dantuch является правильным.

Но если вы просто хотите сделать замену, там есть методы (а именно java.lang.String replaceAll), которые могут это сделать для вас

private static String replaceWhitespaces(String string, String replacement)

Вы можете использовать его следующим образом:

StringBuffer s = new StringBuffer("Mike is good"); System.out.println(replaceWhitespaces(s.toString(), "%20")); 

Ответ 6

Все операции могут быть выполнены в Java 8 или выше:

К массиву символов из заданной строки

char[] characterArray = myString.toCharArray(); 

Чтобы получить список символов из заданной строки

 ArrayList characterList = (ArrayList) myString.chars().mapToObj(c -> (char)c).collect(Collectors.toList()); 

Чтобы получить набор символов из заданной строки Примечание: наборы хранят только уникальные значения. так что если вы хотите получить только уникальные символы из строки, это можно использовать.

 HashSet abc = (HashSet) given.chars().mapToObj(c -> (char)c).collect(Collectors.toSet()); 

Чтобы получить символы в определенном диапазоне из заданной строки: Получить символ, значение которого в юникоде больше 118. https://unicode-table.com/en/#basic-latin

Кодовое значение ASCII для символов * a-z — 97 — 122 * A-Z — 65 — 90

 given.chars().filter(a -> a > 118).mapToObj(c -> (char)c).forEach(a -> System.out.println(a)); 

Он вернет символы: w, x, v, z

Вы ascii значения в фильтре вы можете играть с символами. Вы можете выполнять операции над персонажем в фильтре, а затем вы можете собрать их в списке или установить в соответствии с вашими потребностями

Ответ 7

Я предполагаю, что самый простой способ сделать это — просто перебрать массив char и добавить каждый элемент в ArrayList of Characters следующим образом:

public ArrayList wordToList () < char[] brokenStr = "testing".toCharArray(); ArrayListresult = new ArrayList(); for (char ch : brokenStr) < result.add(ch); >return result; > 

Источник

Converting Char Array to List in Java

In Java 8 and above, you can use the String ‘s method chars() :

myString.chars().mapToObj(c -> (char) c).collect(Collectors.toList()); 

And if you need to convert char[] to List , you might create a String from it first and then apply the above solution. Though it won’t be very readable and pretty, it will be quite short.

Solution 2

Because char is primitive type, standard Arrays.asList(char[]) won’t work. It will produce List in place of List . so what’s left is to iterate over array, and fill new list with the data from that array:

 public static void main(String[] args) < String s = "asdasdasda"; char[] chars = s.toCharArray(); // Listlist = Arrays.asList(chars); // this does not compile, List asList = Arrays.asList(chars); // because this DOES compile. List listC = new ArrayList(); for (char c : chars) < listC.add(c); >> 

And this is how you convert List back to array:

 Character[] array = listC.toArray(new Character[listC.size()]); 

Funny thing is why List asList = Arrays.asList(chars); does what it does: asList can take array or vararg. In this case char [] chars is considered as single valued vararg of char[] ! So you can also write something like

List asList = Arrays.asList(chars, new char[1]); 🙂

Solution 3

Another way than using a loop would be to use Guava’s Chars.asList() method. Then the code to convert a String to a LinkedList of Character is just:

LinkedList characterList = new LinkedList(Chars.asList(string.toCharArray())); 
LinkedList characterList = Lists.newLinkedList(Chars.asList(string.toCharArray())); 

The Guava library contains a lot of good stuff, so it’s worth including it in your project.

Solution 4

Now I will post this answer as a another option for all those developers that are not allowed to use any lib but ONLY the Power of java 8:)

char[] myCharArray = < 'H', 'e', 'l', 'l', 'o', '-', 'X', 'o', 'c', 'e' >; Stream myStreamOfCharacters = IntStream .range(0, myCharArray.length) .mapToObj(i -> myCharArray[i]); List myListOfCharacters = myStreamOfCharacters.collect(Collectors.toList()); myListOfCharacters.forEach(System.out::println); 

Solution 5

You cannot use generics in java with primitive types, why?

If you really want to convert to List and back to array then dantuch’s approach is the correct one.

But if you just want to do the replacement there are methods out there (namely java.lang.String ‘s replaceAll) that can do it for you

private static String replaceWhitespaces(String string, String replacement)
StringBuffer s = new StringBuffer("Mike is good"); System.out.println(replaceWhitespaces(s.toString(), "%20")); 

bourne

Updated on October 16, 2021

Comments

Can anyone help me and tell how to convert a char array to a list and vice versa. I am trying to write a program in which users enters a string (e.g «Mike is good» ) and in the output, each whitespace is replaced by «%20» (I.e «Mike%20is%20good» ). Although this can be done in many ways but since insertion and deletion take O(1) time in linked list I thought of trying it with a linked list. I am looking for someway of converting a char array to a list, updating the list and then converting it back.

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(); //LinkedListl = new LinkedList(Arrays.asList(c)); /* giving error "Syntax error on token " char", Dimensions expected after this token"*/ > > 

So in this program the user is entering the string, which I am storing in a StringBuffer , which I am first converting to a string and then to a char array, but I am not able to get a list l from s . I would be very grateful if someone can please tell the correct way to convert char array to a list and also vice versa.

Источник

Читайте также:  Python что такое slots
Оцените статью