在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
可以采取数组或vararg 。 在这种情况下, char [] chars
被认为是char[]
单值vararg ! 所以你也可以写点东西
List
🙂
使用循环的另一种方法是使用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