将每个其他字符转换为大写字母即abcd - > A B C D

时间:2014-04-09 15:14:47

标签: java string uppercase

所以我今天下午才开始学习Java。这样做的最佳方式是什么?我做错了什么?目前,我没有输出:(

import java.util.Scanner;

class ClassA {
    public static void main(String[] args) {
        Scanner MyScan = new Scanner(System.in);
        System.out.print("Enter Word: ");
        String UI = MyScan.nextLine();
        UI.toLowerCase();
        String s;
        String word = "";
        for (int i = 0; i <= UI.length()-1; i++) {
            s = UI.substring(i, i+1);
            if (i % 2 == 1) {
                s.toUpperCase();    
            }
            word.concat(s);
        }
        System.out.print(word);
        MyScan.close();
    }
}

4 个答案:

答案 0 :(得分:0)

java中的

String是不可变的。这意味着无论您在String上调用哪些修改操作,都需要将其结果分配给原始值,以便实际修改它。

因此,在您的情况下,您应该输入word = word.concat(s)而不是简单地word.concat(s)word.concat(s)创建一个新实例,除非您将其分配给word,否则其值将保持不变。

答案 1 :(得分:0)

您需要分配大小写转换和串联的值来创建字符串的新实例,因为字符串在java中是不可变的。如图所示更改以下行。

UI = UI.toLowerCase();
s = s.toUpperCase();
word = word.concat(s);

答案 2 :(得分:0)

这是一个替代实现 - 它使用StringBuffer进行连接,并将每个字符作为字符而不是字符串处理 `

public static String everyOtherLowerCase(String input) {    
    input = input.toLowerCase();

    StringBuffer result = new StringBuffer("");

    for(int x=0; x<input.length(); x++) {
        Character c = input.charAt(x);

        if(x % 2 == 0) result.append(c);
        else result.append(Character.toUpperCase(c));
    }

    return result.toString();
}

`

正如其他人所指出的,字符串是不可改变的;出于性能原因,最好附加到StringBuffer而不是不断地重新创建和重新分配String对象。这是java中非常常见的性能错误步骤。

答案 3 :(得分:0)

其他答案都是正确的,但我会更加清楚。

字符串不可变意味着您无法更改它们。但是可以创建一个新的String并将其分配给同一个变量。 String的所有方法都没有改变内容。他们中的许多人都返回了新的String。所以:

String s = "Hello";
s.replace("H","J");

...创建一个新的“Jello”String然后抛弃它

String s1 = "Hello";
String s2 = s.replace("H","J");

...创建一个新的“Jello”String,并将其分配给s2

String s1 = "Hello";
s1 = s1.replace("H","J");

...创建一个新的“Jello”String,将其分配给s1,丢弃先前分配给String的旧s1(“Hello”)

当您 想要在适当位置修改字符序列时,类StringBuilder存在。

StringBuilder sb = new StringBuilder("Hello");
sb.replace(0,1,"J");

...使sb包含“Jello”而不是“Hello”。

这些知识可以为您提供修复程序所需的知识。