使用正则表达式拆分不同长度的字符串

时间:2010-09-10 06:15:27

标签: java regex string

我不知道使用正则表达式是否可行。我只是想问一下有人知道答案。

我有string ="hellohowareyou??"。我需要像这样拆分它

[h, el, loh, owar, eyou?, ?]

完成分割,使得第一个字符串的长度为1,第二个长度为2,依此类推。最后一个字符串将包含剩余的字符。我可以使用像这样的函数在没有正则表达式的情况下轻松完成。

public ArrayList<String> splitString(String s)
    {
        int cnt=0,i;
        ArrayList<String> sList=new ArrayList<String>();
        for(i=0;i+cnt<s.length();i=i+cnt)
        {
         cnt++;
         sList.add(s.substring(i,i+cnt));    
        }
        sList.add(s.substring(i,s.length()));
        return sList;
    }

我只是好奇是否可以使用正则表达式来完成这件事。

3 个答案:

答案 0 :(得分:9)

答案 1 :(得分:5)

正则表达式的目的是识别模式。在这里,您不会搜索模式,而是搜索长度。 所以正则表达式不合适

有可能,但不能使用单个正则表达式:使用正则表达式查找第一个 n 字符,您可以使用:“^(。{ n }) 。*“

因此,您可以使用该正则表达式搜索第一个字符。 然后,您创建一个子字符串,然后搜索下两个字符。 等

就像@splash所说的那样,它会使代码变得更加复杂和高效,因为你使用正则表达式来达到其目的之外的东西。

答案 2 :(得分:0)

String a = "hellohowareyou??";
int i = 1;

    while(true) {

        if(i >= a.length()) {
            System.out.println(a);
            break;
        }

        else {
            String b = a.substring(i++);
            String[] out = a.split(Pattern.quote(b) + "$");
            System.out.println(out[0]);
            a = b;
            if(b.isEmpty())
                break;
        }

    }