将字符串拆分为多个两个字符的字符串

3

我有这个字符串 8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C

我该如何将这个字符串分成每个子字符串只包含2个字符?我感到困惑,因为找不到一个分隔符来分割它们。

4个回答

16
System.out.println(Arrays.toString(
    "8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C".split("(?<=\\G.{2})")
));

@PSIXO 是的,它可以。只需将上述内容与 import java.util.Arrays 一起放入公共静态主函数中并运行:[8S, 8Q, 4D, 1S, KC, QC, 2C, 4S, 6H, 4C, 6D, JS, 2S, 1C, 6C],这正是它应该做的。 - KitsuneYMG
在Android中对我不起作用,只拆分前两个,其余部分未被拆分。 - ThanosFisherman
@ThanosFisherman 刚刚重新测试了一下,它适用于Java SE 1.8.0_131。也许您应该再次检查您使用的反斜杠数量,因为您发布的内容与答案中的内容不匹配。 - KitsuneYMG
import java.util.Arrays;public class test {public static void main(String[] args){System.out.println(Arrays.toString("abcdefghijklmnop".split("(?<=\\G.{2})")));}} || C:\...>javac test.java || C:\...>java -cp . test || Result: [ab, cd, ef, gh, ij, kl, mn, op] - KitsuneYMG
当我从标准Java运行它时,它按预期工作,但在Android上运行时却不是这样。非常奇怪。你也可以自己尝试一下。所以我最终在Android中使用了substring答案。 - ThanosFisherman
显示剩余7条评论


0
你需要自己进行类似这样的分割。你可以使用类似以下方式的子字符串函数:
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(); 
}

为什么不使用实际的分割函数?那就是它存在的原因。 - KitsuneYMG
可能的一个原因是,使用复杂的正则表达式进行split操作会显著降低速度。另一方面,如果@nybbler使用String[]而不是Vector,那么他的代码将更快。所以我对这个答案没有加分。 - Stephen C
@Stephen C - 好的。我不习惯在允许动态数组大小的语言中使用数组。 - nybbler
在Java中,数组大小不是动态调整的。但在这种情况下,您不需要一个动态大小的数组。您可以通过src的长度和size的值来计算所需的数组大小。 - Stephen C
@Stephen C:没错,我可能用词不当。我的意思是在运行时确定大小的数组。谢谢你提醒我Java可以处理这个问题。 - nybbler

-1
for (int i = 0; i < a[2].Length; i++)
{
    string ss = (8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C).Substring(i, 2);
    Console.Write(ss);
    i++; 
}

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