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

也可能有一些已经存在的方法来完成这些任务?

4

4 回答 4

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();
}
于 2013-01-13T10:29:11.430 回答
1

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

    String subStr="";

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

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

于 2013-01-13T10:23:47.713 回答
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();
}
于 2013-01-13T10:29:22.610 回答
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;
}

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

于 2013-01-13T10:28:21.123 回答