在Java中将单词拆分为字母

24

如何将单词分解成其组成字母?

以下是一个代码示例,它不能正常工作

 class Test {
         public static void main( String[] args) {
             String[] result = "Stack Me 123 Heppa1 oeu".split("\\a");                                                                                   

             // output should be
             // S
             // t
             // a
             // c
             // k
             // M
             // e
             // H
             // e
             // ...
             for ( int x=0; x<result.length; x++) {
                 System.out.println(result[x] + "\n");
             }
         }
     }

问题似乎出在字符\\a上。 它应该是一个[A-Za-z]。

1
你的例子并没有明确表明你是否想要将“123”拆分开。 - patros
patros: 我不想让“123”被拆开。 - Léo Léopold Hertz 준영
7个回答

56

你需要使用split("");方法。

这将把字符串按每个字符分割。

不过我认为更好的方法是遍历一个String的字符,像这样:

for (int i = 0;i < str.length(); i++){
    System.out.println(str.charAt(i));
}

没有必要创建另一个副本,以不同的形式呈现您的String


+1:嗯,我没有考虑创建字符串的另一个副本。很好的观点。 - Powerlord
1
这里需要考虑的一件事是str.charAt(i)将返回一个char。因此,如果您需要一个字符串,您需要执行Character.toString(str.charAt(i))。这将创建该字符的副本,但仍比使用str.split("")提供O(n)空间要好。 - catalyst294
1
如果输入为空字符串,此解决方案将返回长度为1的数组。 - rightful
最后一条评论是正确的: 空字符串是 .split("") 会将一个额外的(空)元素添加到数组中的 唯一 情况。 - Rautermann

30

"Stack Me 123 Heppa1 oeu".toCharArray() ?


1
+1:简洁明了,易于被for循环处理。 - Powerlord
1
创建一个额外的字符数组是一个不必要的额外步骤。 - jjnguy
这取决于情况。我的猜测是,在超过一定长度时,使用arrayCopy和直接数组访问比调用数百个charAt更“快”。 - Zed
2
调用charAt是O(1),因为String在后端使用数组实现。创建副本总是会更慢。 - jjnguy
1
调用charAt(i)的实现首先对输入参数进行合理性检查,然后将其与内部偏移量相加,之后确实是一个数组访问。 - Zed

8

您可以使用

String [] strArr = Str.split("");

6
这会在0位置添加一个额外的空字符串,因此数组会增加一个额外的元素。 - JPM

6

仅包括数字但不包括空格:

"Stack Me 123 Heppa1 oeu".replaceAll("\\W","").toCharArray();

=> S, t, a, c, k, M, e, 1, 2, 3, H, e, p, p, a, 1, o, e, u

不包括数字和空格:

"Stack Me 123 Heppa1 oeu".replaceAll("[^a-z^A-Z]","").toCharArray()

=> S, t, a, c, k, M, e, H, e, p, p, a, o, e, u


3
 char[] result = "Stack Me 123 Heppa1 oeu".toCharArray();

2

我非常确定他不希望输出空格。

for (char c: s.toCharArray()) {
    if (isAlpha(c)) {
       System.out.println(c);
     }
}

0
String[] result = "Stack Me 123 Heppa1 oeu".split("**(?<=\\G.{1})**");
System.out.println(java.util.Arrays.toString(result));

当您执行代码时,出现以下错误。Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 **(?<=\G.{1})** ^ at java.util.regex.Pattern.error(Pattern.java:1924) at java.util.regex.Pattern.sequence(Pattern.java:2090) at java.util.regex.Pattern.expr(Pattern.java:1964) at java.util.regex.Pattern.compile(Pattern.java:1665) at java.util.regex.Pattern.<init>(Pattern.java:1337) at java.util.regex.Pattern.compile(Pattern.java:1022) at java.lang.String.split(String.java:2313) at java.lang.String.split(String.java:2355) - Suresh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接