public class Title {
public String ChgStr(String s) {
StringBuffer sb = new StringBuffer();
sb.append(s);
for (int i = 0; i < sb.length(); i++) {
// System.out.println("sb.length " + sb.length());
if (sb.charAt(i) == 'z' || sb.charAt(i) == 'Z') {
char c = (char) ((int) sb.charAt(i) - 25);
sb.replace(i, i, Character.toString(c));
} else if ((sb.charAt(i) >= 'a' && sb.charAt(i) <= 'y')
|| (sb.charAt(i) >= 'A' && sb.charAt(i) <= 'Y')) {
char c = (char) ((int) sb.charAt(i) + 1);
sb.replace(i, i, Character.toString(c));
}
}
return sb.toString();
} public static void main(String[] args) {
Title t = new Title();
String ss = t.ChgStr("z1.This a Test.");
System.out.println(ss); }
}
实现的功能是把字符串中的字母转化成下一个字母,如a转化成b,A转化成B,z转化成a,Z转化成A,其他符号不变,如“12zabc e ++”转化为“12abcd f ++”
运行时出现:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
为什么呢?

解决方案 »

  1.   

    这行写错了,并没有实现替换,而是不断往前面插字符,直到内存溢出:sb.replace(i, i, Character.toString(c)); 
    正确写法:public class Title {
    public String ChgStr(String s) {
    StringBuffer sb = new StringBuffer();
    sb.append(s);
    for (int i = 0; i < sb.length(); i++) {
    // System.out.println("sb.length " + sb.length());
    if (sb.charAt(i) == 'z' || sb.charAt(i) == 'Z') {
    char c = (char) (sb.charAt(i) - 25);
    sb.replace(i, i+1, Character.toString(c));
    } else if ((sb.charAt(i) >= 'a' && sb.charAt(i) <= 'y')
    || (sb.charAt(i) >= 'A' && sb.charAt(i) <= 'Y')) {
    char c = (char) (sb.charAt(i) + 1);
    sb.replace(i, i+1, Character.toString(c));
    }
    }
    return sb.toString();
    } public static void main(String[] args) {
    Title t = new Title();
    String ss = t.ChgStr("z1.This a Test.");
    System.out.println(ss);
    }
    }
      

  2.   

    这么写效率更高:public class Title { public String chgStr(String s) {
    char[] chars = s.toCharArray();
    for (int i = 0; i < chars.length; i++) {
    if (chars[i] == 'z' || chars[i] == 'Z') {
    chars[i] = (char) (chars[i] - 25);
    } else if ((chars[i] >= 'a' && chars[i] <= 'y') || (chars[i] >= 'A' && chars[i] <= 'Y')) {
    chars[i] = (char) (chars[i] + 1);
    }
    }
    return new String(chars);
    } public static void main(String[] args) {
    Title t = new Title();
    String ss = t.chgStr("z1.This a Test.");
    System.out.println(ss);
    }
    }