java每三个部分拆分未知的字符串长度

时间:2012-10-26 22:08:32

标签: java string split

public static void main(String[] args) {
    String brandmodel="VolkswagenGolf";
    String [] splitedstring=new String[13]
        //how to insert every 3 letters in splitedstring array

}

我想要的是每隔3个字母拆分上面的字符串。 例如 我想从上面的字符串中保存下一个 卷,KSW,年龄,非政府组织,LF 我在这里读了一些疯狂的代码,但我不理解它们,我想要最简单的方法。 我还没学过Regex

4 个答案:

答案 0 :(得分:5)

  1. 计算您将拥有的零件数量并创建一个数组:

    int parts = (string.length() + 2) / 3;
    String splitted[] = new String[parts];
    
  2. 使用String.substring(int, int)填充数组:

    for (int i = 0; i < parts; ++i)
    {
        int x = i * 3;
        splitted[i] = string.substring(x, Math.min(string.length(), x + 3));
    }
    
  3. Substring使用索引从另一个字符串中取出一个字符串。 问题是,如果你取出一个超出字符串的范围,将抛出异常。所以我所做的是使用Math.min(int, int)将endIndex限制为字符串长度。它将始终返回两个传递值中最小的值。

    这种错误的例子,没有Math.min():

    String str = "test";
    String substr = str.substring(2, 9);
    

    此失败(例外)因为,9超出str的范围。 str只有4个字符。因此,有效的startIndices是:{0,1,2,3},在这种情况下有效的endIndices:{0,1,2,3,4}。

答案 1 :(得分:3)

你可以使用正则表达式后卫匹配最后一个匹配加上任意3个字符:

String[] splitString = brandmodel.split("(?<=\\G...)");

正则表达式(?<=\G...)匹配一个空字符串,该字符串的最后一个匹配(\G)后跟三个字符(...) ((?<= ))

输出:

[Vol, ksw, age, nGo, lf]

答案 2 :(得分:2)

不需要“疯狂代码”,这是一个相对简单的方法:

String[] res = new String[(s.length()+2)/3];
for (int i = 0 ; i != res.length ; i++) {
    res[i] = s.substring(3*i, Math.min(3*i+3, s.length()));
}

关于ideone:link

答案 3 :(得分:0)

适用于所有字符串

       String brandmodel="VolkswagenGolf";
       List <String> splitedstring = new ArrayList<String>();
       int i = 0;
       while(brandmodel.length() > 2 )
       {
           splitedstring.add(brandmodel.substring(0,3));
           brandmodel = brandmodel.substring(3);
       }
       if(brandmodel.length() > 0)
           splitedstring.add(brandmodel);