用K将字符串拆分成数组?

时间:2011-09-10 18:39:56

标签: java

我试图弄清楚如何根据k将字符串拆分为二维数组。

我知道如何将其拆分为单独的字符串或正则表达式。

你怎么这样分裂呢?

String text = "thisismyp";

// Result (where k = 3): 
char[][] = {
  {'t','h','i'},
  {'s','i','s'},
  {'m','y','p'}
}; 

4 个答案:

答案 0 :(得分:0)

正则表达式是:

(.{3})

美好而简单。您可以根据用例添加不区分大小写,换行处理等。

答案 1 :(得分:0)

.{k}应该在你需要自己编写正则表达式的地方工作。

答案 2 :(得分:0)

我还没有测试过,所以也许你需要改变一下,但我认为这样可行:

public String[] split(String str, int k)
{
    String[] a = new String[Math.ceil((double)str.length() / (double)k)];
    for (int i = 0; i < str.length(); i += k)
    {
        a[i / k] = str.substring(i, Math.min(i + k, str.length()));
    }
    return a;
}

如果你真的想要它作为char矩阵,请使用以下内容:

public char[][] split(String str, int k)
{
    char[][] a = new char[Math.ceil((double)str.length() / (double)k)][0];
    for (int i = 0; i < str.length(); i += k)
    {
        String part = str.substring(i, Math.min(i + k, str.length()));
        a[i / k] = part.toCharArray();
    }
    return a;
}

答案 3 :(得分:0)

如果你不想使用正则表达式,你可以强制它。蛮力更快但在你的情况下我不会担心性能。仍然如果有人登陆此页面并且没有使用具有简单正则表达式支持的语言;这是一个快速的Java实现,嵌入在一个可以编译和运行的完整应用程序中。

import java.util.Arrays;
public class Split {

    private static int K = 3;

    /**
     * Splits a string into a 2-D array of chars.  An array or list of strings would
     * be better, but <strong>the OP asked for an array of array of chars!!!
     */
    public static char[][] split(String s) {
        char[][] result = new char[(s.length() + (K-1)) / K][K];
        int row = 0, col = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            result[row][col] = c;
            if (col == K - 1) {row++; col = 0;} else col++;
        }
        return result;
    }

    // Sorry about the hideous copy/paste
    public static void main(String[] args) {
        System.out.println(Arrays.deepToString(split("")));
        System.out.println(Arrays.deepToString(split("1")));
        System.out.println(Arrays.deepToString(split("12")));
        System.out.println(Arrays.deepToString(split("123")));
        System.out.println(Arrays.deepToString(split("1234")));
        System.out.println(Arrays.deepToString(split("12345")));
        System.out.println(Arrays.deepToString(split("123456")));
        System.out.println(Arrays.deepToString(split("1234567")));
        System.out.println(Arrays.deepToString(split("12345678")));
        System.out.println(Arrays.deepToString(split("123456789")));
        System.out.println(Arrays.deepToString(split("1234567890")));
    }
}