在Java中将Char数组转换为List

bou*_*rne 27 java list stringbuffer

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

因此,在这个程序中的用户输入字符串,这是我在我存储StringBuffer,这我先转换为字符串,然后到一个char数组,但我没能获得一个列表ls.

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

hot*_*key 40

在Java 8中,String方法提供了一种将单词转换chars()char[]:

myString.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果您需要转换List<Character>String,您可以先创建一个String,然后应用上述解决方案.虽然它不会非常易读和漂亮,但它会很短.


dan*_*uch 21

因为char是原始类型,所以标准Arrays.asList(char[])不起作用.它将List<char[]>代替List<Character>... 而产生剩下的就是迭代数组,并用该数组中的数据填充新列表:

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是你将List转换回数组的方法:

    Character[] array = listC.toArray(new Character[listC.size()]);
Run Code Online (Sandbox Code Playgroud)




有趣的是List<char[]> asList = Arrays.asList(chars);它为什么做它:asList可以采取数组或vararg.在这种情况下char [] chars被视为单值vararg char[]!所以你也可以写点东西

List<char[]> asList = Arrays.asList(chars, new char[1]); :)


Cyr*_* Ka 14

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

LinkedList<Character> characterList = new LinkedList<Character>(Chars.asList(string.toCharArray()));
Run Code Online (Sandbox Code Playgroud)

或者,以番石榴的方式:

LinkedList<Character> characterList = Lists.newLinkedList(Chars.asList(string.toCharArray()));
Run Code Online (Sandbox Code Playgroud)

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


ΦXo*_*a ツ 7

现在我将发布这个答案作为所有那些不允许使用任何库而只能使用 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);
Run Code Online (Sandbox Code Playgroud)