【问题标题】:Splitting words into letters in Java [duplicate]在Java中将单词拆分为字母[重复]
【发布时间】:2010-12-04 01:30:05
【问题描述】:

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

无效的代码示例

 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]。

【问题讨论】:

  • 你的例子并没有说明你是否想要拆分“123”。
  • patros:我不希望“123”被拆分。

标签: java split


【解决方案1】:

您需要使用split("");

这将按每个字符拆分。

但我认为像这样迭代String 的字符会更好:

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

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

【讨论】:

  • +1:嗯,我没有考虑创建另一个字符串副本。好点子。
  • 这里要考虑的一点是 str.charAt(i) 将返回一个字符。所以如果你需要一个字符串,你需要做 Character.toString(str.charAt(i))。这将创建该字符的副本,但这仍然比使用 str.split("") 给你的 O(n) 空间要好。
  • 如果输入为空字符串,此解决方案将给出长度为 1 的数组
  • 最后一条评论是正确的:空字符串是 only 的情况,.split("") 会在数组中添加一个额外的(空)元素。
【解决方案2】:

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

【讨论】:

  • +1:简单,简洁,可以很容易地喂给for。
  • 创建额外的 char 数组是不必要的额外步骤。
  • 视情况而定。我的猜测是,超过一定长度时,arrayCopy 和直接数组访问比调用数百个 charAt“更快”。
  • 调用 charAt 是 O(1),因为 String 是在后端使用数组实现的。创建副本总是会变慢。
  • 调用charAt(i)的实现是先对输入参数进行完整性检查,然后用内部偏移量对其进行偏移,然后是数组访问。
【解决方案3】:

你可以使用

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

【讨论】:

  • 这会在 0 位置添加一个额外的空白字符串,因此数组是一个额外的。
【解决方案4】:

包括数字但不包括空格:

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

=&gt; 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()

=&gt; S, t, a, c, k, M, e, H, e, p, p, a, o, e, u

【讨论】:

    【解决方案5】:
     char[] result = "Stack Me 123 Heppa1 oeu".toCharArray();
    

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:
        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 **(?&lt;=\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.&lt;init&gt;(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)
        猜你喜欢
        • 2022-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-16
        • 2014-10-21
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多