正则表达式在java中将字符串拆分为一半

时间:2010-07-14 20:21:52

标签: java regex

我们需要帮助如何为string.split编写正则表达式,这样我们就可以将字符串分成两半。

感谢。

2 个答案:

答案 0 :(得分:21)

没有明显的正则表达式模式可以做到这一点。 可能可以使用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]"

上述内容会将奇数Stringpart[1]分开一个字符长于part[0]。如果你需要反过来,那么只需定义mid = (s.length() + 1) / 2;


N -part split

您也可以执行以下操作将字符串拆分为 N -parts:

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

参考

相关问题

答案 1 :(得分:8)

你真的不需要正则表达式。只需使用substring()

int midpoint = str.length() / 2;
String firstHalf = str.substring(0, midpoint);
String secondHalf = str.substring(midpoint);