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数组,但我没能获得一个列表l从s.
如果有人可以告诉正确的方法将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
使用循环的另一种方法是使用Guava的Chars.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库包含很多好东西,因此值得在项目中包含它.
现在我将发布这个答案作为所有那些不允许使用任何库而只能使用 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)
| 归档时间: |
|
| 查看次数: |
70524 次 |
| 最近记录: |