具有特定频率的String的subString

时间:2013-01-13 10:21:04

标签: java string

考虑以下字符串,我想以这种方式得到一个子字符串:

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

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

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

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

    String subStr="";

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

编辑:更好的想法是使用StringBuilder,请参阅@asgoth的答案

答案 2 :(得分: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();
}

答案 3 :(得分: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;
}

以下是您的请求的方法。没有内置的。