在Java中将Char数组转换为List

任何人都可以帮助我并告诉如何将char数组转换为列表,反之亦然。 我正在尝试编写一个用户输入字符串的程序(例如"Mike is good" ),在输出中,每个空格都被"%20"替换(即"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(); //LinkedList l = new LinkedList(Arrays.asList(c)); /* giving error "Syntax error on token " char", Dimensions expected after this token"*/ } } 

所以在这个程序中,用户输入的字符串,我存储在StringBuffer ,我首先转换为字符串,然后转换为char数组,但我无法从s获取列表l

如果有人可以告诉正确的方法将char数组转换为列表,反之亦然,我将非常感激。

在Java 8中, CharSequence::chars方法提供了一种将String转换为List的单行方式:

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

如果需要将char[]转换为List ,可以先从中创建一个String ,然后应用上面的解决方案。 虽然它不会非常易读和漂亮,但它会很短。

因为char是原始类型,所以标准的Arrays.asList(char[])将不起作用。 它将生成List来代替List …所以剩下的就是遍历数组,并用该数组中的数据填充新列表:

  public static void main(String[] args) { String s = "asdasdasda"; char[] chars = s.toCharArray(); // List list = 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被认为是char[] 单值vararg ! 所以你也可以写点东西

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

使用循环的另一种方法是使用Guava的Chars.asList()方法。 然后将String转换为Character的LinkedList的代码就是:

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

或者,以番石榴的方式:

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

Guava库包含很多好东西,因此值得在项目中包含它。

现在我将这个答案作为另一个选项发布给所有那些不允许使用任何lib但只有java 8的强大function的开发人员:)

 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); 

你不能在原始类型的java中使用generics, 为什么?

如果你真的想转换为List并返回数组,那么dantuch的方法是正确的。

但是如果你只是想做替换,那里有一些方法(即java.lang.String的replaceAll )可以为你做

 private static String replaceWhitespaces(String string, String replacement) { return string != null ? string.replaceAll("\\s", replacement) : null; } 

你可以像这样使用它:

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

输出:

 Mike%20is%20good