【问题标题】:Converting Every Other Char to Upper Case i.e. abcd --> aBcD将每个其他字符转换为大写,即 abcd --> aBcD
【发布时间】:2014-05-22 21:52:47
【问题描述】:

所以我今天下午才开始学习 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();
    }
}

【问题讨论】:

    标签: java string uppercase


    【解决方案1】:

    Strings 在 java 中是不可变的。这意味着无论您在 String 上调用什么修改操作,您都需要将其结果分配给原始值才能实际修改它。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这是一个替代实现——它使用 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 中很常见的性能错误步骤。

        【讨论】:

          【解决方案4】:

          其他答案是正确的,但我会努力让它更清楚。

          字符串是不可变的,这意味着您无法更改它们。但是您可以创建一个新字符串并将其分配给同一个变量。 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,丢弃之前分配给s1 的旧String(“Hello”)。

          StringBuilder 类存在于您确实想就地修改字符序列的场合。

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-03-11
            • 1970-01-01
            • 2022-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-20
            • 1970-01-01
            • 2011-07-08
            相关资源
            最近更新 更多