java - 正则表达式在java中将字符串分成两半

标签 java regex

我们需要帮助来编写 string.split 的正则表达式,以便我们可以将字符串分成两半。

谢谢。

最佳答案

没有明显的正则表达式模式可以做到这一点。 可能可以用 String.split 做到这一点,但我只是像这样使用 substring:

    String s = "12345678abcdefgh";

    final int mid = s.length() / 2;
    String[] parts = {
        s.substring(0, mid),
        s.substring(mid),
    };

    System.out.println(Arrays.toString(parts)); 
    // "[12345678, abcdefgh]"

上面的代码会将奇数长度的 String 拆分为 part[1]part[0] 长一个字符。如果您需要相反的方式,则只需定义 mid = (s.length() + 1)/2;


N-部分拆分

您也可以像这样将字符串拆分为 N 部分:

static String[] splitN(String s, final int N) {
    final int base = s.length() / N;
    final int remainder = s.length() % N;

    String[] parts = new String[N];
    for (int i = 0; i < N; i++) {
        int length = base + (i < remainder ? 1 : 0);
        parts[i] = s.substring(0, length);
        s = s.substring(length);
    }
    return parts;
}

然后你可以这样做:

    String s = "123456789";

    System.out.println(Arrays.toString(splitN(s, 2)));  
    // "[12345, 6789]"

    System.out.println(Arrays.toString(splitN(s, 3)));
    // "[123, 456, 789]"

    System.out.println(Arrays.toString(splitN(s, 5)));  
    // "[12, 34, 56, 78, 9]"

    System.out.println(Arrays.toString(splitN(s, 10))); 
    // "[1, 2, 3, 4, 5, 6, 7, 8, 9, ]"

请注意,这有利于前面的部分容纳额外的字符,并且当部分的数量多于字符的数量时它也适用。


附录

在上面的代码中:

  • ?: 是条件运算符,也就是三元运算符。
  • / 执行整数除法。 1/2 == 0
  • % 执行整数取余运算。 3 % 2 == 1。此外,-1 % 2 == -1

引用资料

相关问题

关于java - 正则表达式在java中将字符串分成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250143/

相关文章:

ruby-on-rails - Ruby:Gsub - 一行中的多个字符串替换[在一个数组中]

regex - Perl:正则表达式获取重复模式之间的所有文本

java - 将 bytes 数组转换为 long

regex - 如何为每场比赛生成独特的指导

python - 正则表达式处理双反斜杠

java - 调用 super 方法是否有意义?

java - 使用可选的逗号和点匹配数字

java - 当使用随机种子时,SecureRandom 是否会减弱?

java - 将 double 格式设置为 2 位小数,前导 0

java - Spring 集成 - 需要后端异步处理的 Web 服务网关的即时响应