我想将用户输入解析为单个字符。 例如,输入
Hello! My name is x
应分为:
{"H", "e", "l", "l", "o", "!"," ", "M","y"....}
请注意,我想保留空白。
我似乎无法弄清楚如何使用 String.split 做到这一点。我尝试过搜索能做到这一点的正则表达式,但是它们都在!处中断。
这是当前代码,我正在尝试分割来自扫描仪的字符串。
public static List<String> getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a line of text: ");
return Arrays.asList(scanner.next().split(""));
}
感谢您的帮助!
答案 0 :(得分:2)
尝试:
String[] cs = s.split("");
答案 1 :(得分:1)
使用String.toCharArray
这将为您提供char[]
的字符串,并保留空格。
答案 2 :(得分:1)
我很好奇你为什么要这样做。基本上可以使用charAt()
将字符串读取为数组。您可以使用StringReader
将字符串转换为流。您可以使用IntStream
或chars()
将字符串转换为codePoints()
。或者,如果它的内部字符数组带有toCharArray()
,则可以获得一个副本。
关于您在toCharArray()
或.split()
中删掉的评论中提到的内容,他们没有。您的某处必须有一个错误,请向我们显示您的代码。
public static void main( String[] args ) {
String test = "Hello! My name is x";
char[] chars = test.toCharArray();
System.out.println( Arrays.toString( chars ) );
}
这会为我打印整个字符串,并且不会中断。
run:
[H, e, l, l, o, !, , M, y, , n, a, m, e, , i, s, , x]
BUILD SUCCESSFUL (total time: 0 seconds)
更新:关于更新,next()
查找令牌,这些令牌默认情况下在空白处被切断。您需要nextLine()
。
return Arrays.asList(scanner.next().split(""));
更改为:
return Arrays.asList(scanner.nextLine().split(""));
答案 3 :(得分:0)
尝试单词边界匹配器:
assertEquals(3, "a b".split("\\b").length)
答案 4 :(得分:0)
您可以执行以下操作:
String foo = "Hello! My name is x";
for(char c: foo.toCharArray()) {
//do whatever you want here
//for example
System.out.print(c);
}
希望有帮助。