我想重复字符串's',得到一个有'n'个字符的大字符串,并想知道这个大字符串中有多少'a'。我的代码在下面,它给了我";OutOfMemoryError:Java堆空间";错误,找不到此问题的解决方案
String s = "abcab";
long n = 1000000000000l;
int strLength = s.length();
double temp = n / strLength;
long tempTwo = (long) temp + 1;
long countOfAs = 0;
// making large String
StringBuilder sb = new StringBuilder(s);
for (long i = 0; i < tempTwo; i++) {
sb.append(s);
}
//take the sub string which's length is n
String out = sb.substring(0, (int) n);
//Find 'a's in the sub string
char[] stringToCharArray = out.toCharArray();
for (int i = 0; i < n; i++) {
if (stringToCharArray[i] == 'a') {
countOfAs += 1;
}
}
System.out.println(countOfAs + ">>>>");
在这里您可以看到如何在Java中增加堆大小:
在Java 中增加堆尺寸
有更简单的方法可以计算字符串中的a,它只是:
countOfAs=n*2;
您的代码是错误的,因为循环的第二个必须是";i<s.长度((*n〃;,因为您的字符串有多个字符。
如果你的字符串真的是@Progman评论的2 TB大小,那么你应该考虑一种算法,它在几个间隔内计算countOfAs。