将字符串拆分为字符串数组

Mat*_*att 104 java regex split

我需要将String拆分为单个字符串的数组.

例如,拆分"cat"会给出数组"c","a","t"

小智 116

"cat".split("(?!^)")
Run Code Online (Sandbox Code Playgroud)

这将产生

数组["c","a","t"]

  • 在Java 8 String.split`的`的行为略有改变,使得导致*由零宽度匹配也未包括在结果阵列中产生的空*字符串,所以`(?!^)`断言的位置不是字符串的开始变得不必要,从而允许正则表达式被简化为没有什么 - `"猫" .split("")` - 但在Java 7和下方产生的结果阵列中的领先的空字符串. (8认同)
  • 怎么样和为什么?这是一个正则表达式意味着任何角色?因为在我看来,通过split工作的方式,这应该仅拆分实际的字符(,?,!,^和).但是,它就像你说的那样工作. (7认同)
  • 这确实是一个正则表达式,称为负向前瞻.在这里查看文档:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum (3认同)
  • @ EW-CodeMonkey`(?!`...`)`是用于否定断言的正则表达式语法–它断言其中的内容不匹配。并且`^`匹配字符串的开头,因此正则表达式在*不是*字符串开头的每个位置都匹配,并在其中插入一个分割符。该正则表达式也匹配字符串的末尾,因此也将空字符串附加到结果上,除了`String.split`文档[says](https://docs.oracle.com/javase/8/docs /api/java/lang/String.html#split-java.lang.String-)“结果数组中不包含尾随空字符串”。 (3认同)
  • 它创建一个包含整个字符串的数组。 (2认同)

Yur*_*ich 100

"cat".toCharArray()
Run Code Online (Sandbox Code Playgroud)

但如果你需要字符串

"cat".split("")
Run Code Online (Sandbox Code Playgroud)

编辑:将返回一个空的第一个值.

  • "cat".split("")会返回[,c,a,t],不是吗?你的数组中会有一个额外的字符...... (12认同)
  • 如果您使用的是Java 8,此答案现在可以正常工作.请参阅http://stackoverflow.com/a/22718904/1587046 (5认同)
  • "cat".split("")不能像Matt预期的那样工作,你会得到一个额外的空String => [,c,a,t]. (4认同)
  • 这是jdk8中的一个可怕的变化,因为我依赖于split("")并且确实解决了这个愚蠢的空第一个索引的原因.现在升级到java8后,它的运行方式与我多年前的预期相同.不幸的是现在我的解决方法破坏了我的代码...... ggrrrr. (3认同)

Ram*_*man 37

String str = "cat";
char[] cArray = str.toCharArray();
Run Code Online (Sandbox Code Playgroud)

  • 挑剔,原始问题要求一个String数组,而不是Char数组.但是从这里获取一个String数组非常容易. (3认同)

Jan*_*nar 6

如果输入的字符超出了基本多语言平面(某些CJK字符,新的表情符号...),"ab".split("(?!^)")则无法使用诸如之类的方法,因为它们会破坏此类字符(导致array ["a", "?", "?", "b"]),因此必须使用更安全的方法:

"ab".codePoints()
    .mapToObj(cp -> new String(Character.toChars(cp)))
    .toArray(size -> new String[size]);
Run Code Online (Sandbox Code Playgroud)


小智 6

split("(?!^)")如果字符串包含代理项对,则无法正常工作。你应该使用split("(?<=.)").

\n
String[] splitted = "\xe8\x8a\xb1ab".split("(?<=.)");\nSystem.out.println(Arrays.toString(splitted));\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
[\xe8\x8a\xb1, a, b, , , ]\n
Run Code Online (Sandbox Code Playgroud)\n


Lez*_*rte 5

总结一下其他答案...

这适用于所有 Java 版本:

"cat".split("(?!^)")
Run Code Online (Sandbox Code Playgroud)

这仅适用于 Java 8 及更高版本:

"cat".split("")
Run Code Online (Sandbox Code Playgroud)