【问题标题】:Split string into several two character strings将字符串拆分为多个两个字符串
【发布时间】:2011-06-14 21:17:27
【问题描述】:

我有这个字符串8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C

如何将此字符串拆分为每个子字符串包含 2 个字符的子字符串?我很困惑,因为我找不到分隔符来分割它们。

【问题讨论】:

    标签: java string split substring


    【解决方案1】:
    System.out.println(Arrays.toString(
        "8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C".split("(?<=\\G.{2})")
    ));
    

    【讨论】:

    • 这不会截断奇数长度字符串的最后一个字符吗?此外,对简单问题使用正则表达式通常会降低代码的可读性,因为它实际上只是增加了第二个问题。我喜欢考虑在我之后维护代码的程序员。
    • @nybbler 刚刚测试过。它不会截断。最后一个字符前面还有两个字符。它也适用于单个字符。这实际上可能是一个错误 =/
    • 当它做你想做的事时,它是一个“功能”而不是一个错误;)
    • @nybbler 仅供参考,我想通了。正则表达式 DOES NOT 对单个字符或奇数长度字符串的最后一个字符起作用。但它已经在该字符之前立即分裂了这一点。所以它不匹配,剩余的(1 个字符)进入最后一个 bin。
    • 这不符合要求。它只创建 2 个子字符串,首先是 2 个字符,然后是其余的。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      您必须自己进行这样的拆分。您可以通过以下方式使用类似子字符串的内容:

      public String[] customSplit(String src, int size) {
          Vector<String> vec = new Vector<String>();
      
          for(int i = 0; i < src.length(); i += size) {
              vec.add(src.substring(i, (i+size > src.length()) ? src.length() : i+size);
          }
      
          return vec.toArray(); 
      }
      

      【讨论】:

      • 为什么不使用实际的拆分功能呢?这就是它存在的原因。
      • 嗯,一个可能的原因是split带有一个粗糙的正则表达式可能会明显变慢。如果他使用String[] 而不是Vector,OTOH @nybbler 的代码会更快。所以我的这个答案没有 +1。
      • @Stephen C - 够公平的。我不习惯使用允许动态数组大小的语言处理数组
      • 在 Java 中,数组不是动态调整大小的。但在这种情况下,您不需要动态大小的数组。您可以根据src 的长度和size 的值来计算所需的数组大小。
      • @Stephen C:是的,我可能选词不当。我的意思是一个在运行时确定大小的数组。感谢您提醒我 Java 可以处理。
      【解决方案4】:
      for (int i = 0; i < a[2].Length; i++)
      {
          string ss = (8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C).Substring(i, 2);
          Console.Write(ss);
          i++; 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2012-03-31
        相关资源
        最近更新 更多