每次出现一个字母在Java中形成一个更长的数组时拆分一个数组

时间:2012-10-04 20:27:47

标签: java arrays split

每次出现一个字母时,我都会将一个字符串拆分成一个数组,但是我现在想要将数组中的每个字符串拆分成更多数组,然后出现另一个字母,在每个拆分下面添加一个数字,并删除该字母。

这是我的代码:

private String input = "118u121u23n24"
private int y = 0;
private String[] split_main = new String[100];
private void split_u(){
        String[] split = input.split("u");
        for(int x=0; split.length>x; x++){
            split_main[y] = split[x];
            if(split.length>x+1)
                split_main[y+1] = "+";
            y +=2;
        }

这会将我的字符串拆分成这样的数组 - 每次出现“u”时都会创建一个新数组并添加一个加号

118
+
121
+
23n24

我现在想要遍历每个数组并查找字母n并将其放在一个单独的行上,这将是新数组。但是每次我尝试这个都有错误,因为我似乎无法再在阵列上使用Split方法。如果不能使用拆分那么还有另一种方法吗?

118
+
121
+
23
n
24

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

试试这个

String[] split = input.split("u|n");

u|n表示用un分割字符串,只需将字符串拆分为两个分隔符

虽然您想在两个级别添加不同的分隔符,但您应该编写这样的代码。

    String input = "118u121u23n24";
    String[] s2;
    ArrayList<String> main = new ArrayList<String>();

    String[] split = input.split("u");
    for(int x=0; split.length>x; x++){
        s2 = split[x].split("n");

        for(int k=0; k<s2.length; k++){
            main.add(s2[k]);
            if(s2.length>k+1)
                main.add("n");
        }

        if(split.length>x+1)
            main.add("+");
    }
    // print main array to test
    for(int i=0;i<main.size();i++)
        System.out.println(main.get(i)); 

答案 1 :(得分:1)

我建议您使用正则表达式立即拆分所有字母:

String[] split = input.split("(+|n)");

如果您需要中间步骤,那么唯一的方法是迭代第一个拆分,在第二个字母上构建拆分结果数组。如果要对多个拆分模式(不仅仅是“+”和“n”)执行此操作,则需要一个通用过程。这是示例代码:

/**
 * Replaces one element of a list of strings with the results of
 * splitting that element with a given pattern. A copy of the pattern
 * is inserted between the elements of the split.
 * @param list The list of elements to be modified
 * @param pattern The pattern on which to split
 * @param pos The position of the element to split
 * @return The number of additional elements inserted. This is the amount by
 *         which the list grew. If the element was not split, zero is returned.
 */
int splitElements(List<String> list, String pattern, int pos) {
    String[] split = list.get(pos).split(pattern);
    if (split.length > 1) {
        list.set(pos++, split[0]);
        for (int i = 1; i < split.length; ++i) {
            list.add(pos++, pattern);
            list.add(pos++, split[i]);
        }
    } // else nothing to do
    return (split.length << 1) - 1;
}

然后你会用你想要分割的每个角色来调用它:

private String input = "118u121u23n24";
private ArrayList<String> split_main = new ArrayList<String>();
split_main.add(input);
splitElements(split_main, "+", 0);
for (int i = 0; i < len; ++i) {
    i += splitElements(split_main, "n", i);
}

答案 2 :(得分:0)

这是可能的。使用List代替数组可以轻松插入新项目。

如果您只想要数组,请两次执行:首先,迭代input并计算因n而需要多少个单元格,然后创建适当大小的新数组并复制{ {1}}内容,沿途分裂。