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

}的Java分割字符串的长度未知每3个部分

我要的是上面的字符串中每3个字母分开。 例如 我想从上面的字符串保存下 Vol,ksw,age,nGo,lf 我已经在这里读到一些疯狂的代码,但我不明白他们,我想要最简单的方法。 我还没有学会正则表达式还

+2

你试过了什么?这真的是一个非常简单的问题,不应该涉及任何“疯狂代码”。 – Colleen

+0

你根本不需要regex。查看字符串的length()和String的substring()方法。 – Lipongo

+0

我不得不说,字符串长度是未知的 – user1417426

回答

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)); 
    } 
    

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

是的,这是惊人的两个答案几乎相同,给出或采取一些变量名称。不过,我很喜欢这个正则表达式的解决方案。 – dasblinkenlight

+0

@Martijn Courteaux为什么我们需要找到最小值,我们不应该说splitted [i] = string.substring(x,x + 3); ?请编辑您的答案,并附上我的问题信息,我会将您标记为答案 – user1417426

+0

@ user1417426:我添加了额外的解释。 –

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

+0

很高兴看到我们会以完全相同的方式编写它:) –

3

你可以使用正则表达式查找后面匹配的最后一场比赛加上任何3个字符:

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

(?<=\G...)有后跟三个字符(...)最后一场比赛(\G)之前((?<=))

一个空字符串相匹配的正则表达式

输出:

[Vol, ksw, age, nGo, lf] 
+0

+1这是非常好的:)回答将极大地受益于神奇的正则表达式背后的简短解释和相对较少使用的'\\ G'标记前一场比赛。 – dasblinkenlight

+0

简要说明加入:) – Reimeus

+1

+1真棒正则表达式 –

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);