将包含特殊字符的字符串拆分为单个字符

时间:2018-09-06 15:50:00

标签: java regex

我想将用户输入解析为单个字符。 例如,输入

  • 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("")); 
}

感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

尝试:
String[] cs = s.split("");

答案 1 :(得分:1)

使用String.toCharArray

这将为您提供char[]的字符串,并保留空格。

答案 2 :(得分:1)

我很好奇你为什么要这样做。基本上可以使用charAt()将字符串读取为数组。您可以使用StringReader将字符串转换为流。您可以使用IntStreamchars()将字符串转换为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);
}

希望有帮助。