2013-01-13 32 views
0

考虑以下字符串的字符串,我想获得那样的子字符串:串具有特定频率

String str="abcdefghij" 

子字符串返回:

acegi 

也就是说每两第一个字符串str的字符。 然后用相同的推理,得到第一个字符串str的每三个字符的子字符串。

而且随着F的

这是我目前的方法的频率相同的问题,但实际上有一个错误:

private static String subString(String str,int freq){ 
     String subStr=null; 

     for(int i = 0; i < str.length(); freq++){ 
      subStr= subStr + str[i]; 
     } 
    return subStr; 
} 

而且也许有这些任务的一些已有的方法?

回答

2

我不知道一个内置的方法来做到这一点。你可以使用StringBuilder,以避免产生很多临时字符串,并用正确的容量初始化它:

private static String subString(String str, int freq) { 
    //make it the right capacity to avoid reallocations 
    StringBuilder subStr = new StringBuilder(str.length()/freq + 1); 

    for (int i = 0; i < str.length(); i += freq) { 
     subStr.append(str.charAt(i)); 
    } 
    return subStr.toString(); 
} 
+0

请问downvoter发表评论? – assylias

+0

长度> 0的字符串的无尽循环;) – jlordo

+0

Outch ...确实可怕的复制粘贴...感谢您指出它。 – assylias

1

您需要每个字符串中的第freq个字符。试试这个

String subStr=""; 

    for(int i = 0; i < str.length(); i+=freq){ 
     subStr= subStr + str.charAt(i); 
    } 

编辑:一个更好的主意是使用StringBuilder,看到@asgoth

0
private static subString(String str, int freq){ 
String subStr; 
for(int i=0;i<str.length();i+=freq){ 
    subStr=subStr+str.charAt(i); 
} 
return subStr; 
} 

答案下面是你的请求的方法。没有内置的。

1

请为迭代,使用StringBuilder!我已经看到像你使用这样的结构,炸毁应用服务器。

private static String subString(String str,int freq){ 
    StringBuilder out = new StringBuilder(); 

    for(int i = 0; i < str.length(); i+=freq){ 
     out.append(str.charAt(i)); 
    } 
    return out.toString(); 
}