如何将字符串中的替换字符设置为大写?

时间:2015-01-28 13:20:02

标签: java string

我编写了以下代码,但类似的字符总是在同一个案例中。这段代码有什么问题,如何解决这个问题?

private void genBTActionPerformed(java.awt.event.ActionEvent evt) {                                      
    String str = new String(strTF.getText());
    int n = str.length();
    char ch;
    int i;
    for(i = 0; i < n; i++) {
        if(i % 2 == 0) {
            ch = Character.toLowerCase(str.charAt(i));
            str = str.replace(str.charAt(i), ch);
        } else {
            ch = Character.toUpperCase(str.charAt(i));
            str = str.replace(str.charAt(i), ch);
        }
    }
    jumTF.setText(str);
}   

3 个答案:

答案 0 :(得分:6)

与其名称不同,.replace()会替换整个输入中的字符/ CharSequence。与.replaceAll()的区别在于它将文字作为参数而不是正则表达式/正则表达式替换字符串(并且它有一个重载,将两个char作为参数)。这是String之后matches()类的第二个错误命名方法。

此外,您在替换的每个字符上创建一个新的String,因此对于一个n字符长的字符串,您有n + 1个字符串。这样做是这样的:

final char[] chars = str.toCharArray();

final int len = chars.length;

char c;

for (int i = 0; i < len; i++) {
    c = chars[i];

    chars[i] = i % 2 == 0
        ? Character.toLowerCase(c)
        : Character.toUpperCase(c);
}

jumTF.setText(new String(chars));

答案 1 :(得分:0)

在你的程序中,你使用replace()替换整个输入中的字符/ CharSequences你需要做的是

  • 将字符串放入数组中。
  • 迭代所说的阵列。
  • 将该数组转换回字符串

      

    private void genBTActionPerformed(java.awt.event.ActionEvent evt){

    String str = new String(strTF.getText());
    char [] chr= str.toCharArray();
    int n = chr.length;
    char ch;
    int i;
    for(i = 0; i < n; i++) {
        if(i % 2 == 0) {
            ch = Character.toLowerCase(chr[i]);
           chr[i]=ch;
        } else {
            ch = Character.toUpperCase(chr[i]);
         chr[i]=ch;
        }
    }
    jumTF.setText(new String(chr)); }
    

希望这会对你有所帮助:)。

答案 2 :(得分:0)

由于 String 在java中是 immutable ,您可以使用 StringBuilder或StringBuffer 来解决此问题

StringBuilder str=new StringBuilder(inputString);

您只需轻微更改即可使用自己的逻辑,而不是使用

str = str.replace(str.charAt(i), ch);//since  it replaces in whole string

使用

str.setCharAt(i,ch);

所以你的最终计划如下:

for(i = 0; i < n; i++) {
        if(i % 2 == 0) {
            ch = Character.toLowerCase(str.charAt(i));
            str.setCharAt(i,ch);
        } else {
            ch = Character.toUpperCase(str.charAt(i));
            str.setCharAt(i,ch);
        }
    }

假设InputString为:stackoverflow 然后输出是:sTaCkOvErFlOw