【问题标题】:Converting Lowercase array to Uppercase without using toUpperCase()不使用 toUpperCase() 将小写数组转换为大写
【发布时间】:2016-09-03 16:04:25
【问题描述】:

首先,这是一项家庭作业,我正在寻求帮助,因为我遇到了困难。我已经为此工作了几个小时,但无法弄清楚。我正在尝试将用户输入作为字符串并将其存储为 char 数组,并在不使用 toUpperCase() 方法的情况下以全部大写形式输出字符。

到目前为止,我已经编写了代码,我的计划是创建两个包含小写字母和大写字母的数组,并创建 and for 循环,并在其中一个 if 语句替换 char 数组中的字符并输出它们大写。但我不知道如何替换字符。这是我到目前为止得到的:

import java.util.Scanner;
class Q4{
    public static void main(String []args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a String: ");
        String s = input.nextLine();
        String s1 = s.toLowerCase(); 
        char[] s2 = s1.toCharArray(); //Converts the String into a char Array

        char LowerAlp[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        char UpperAlp[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

        for(int i=0; i<s2.length; i++){
            if(s2==LowerAlp){
                //Here is the problem
            }

        }
    }
}

【问题讨论】:

  • 什么是LowerApp?
  • @cssGEEK 抱歉,它应该是 LowerAlp。我已经编辑过了。

标签: java arrays string uppercase


【解决方案1】:

我认为您不需要数组:

for(int i = 0; i < s2.length; ++i)
{
    if('a' <= s2[i] && s2[i] <= 'z')
        s2[i] += 'A' - 'a';
}

【讨论】:

    【解决方案2】:

    字符代码以连续形式保持字母字符,因此'a''A' 之间的区别与'b''B' 之间的区别相同。这个知识可以用来小写转大写:

    int diff = 'A' - 'a';
    String lower = "this is lowercase";
    StringBuilder sb = new StringBuilder(lower.length());
    for (char c : lower.toCharArray()) {
        if (c >= 'a' && c <= 'z') {
            c = (char)(c + diff);
        }
        sb.append(c);
    }
    String upper = sb.toString();
    

    【讨论】:

      【解决方案3】:

      其他两个答案都可以更好地处理您的问题,但是为了给您一个与您的示例非常接近的答案,以下将完成这项工作

      import java.util.Scanner;
      class Q4{
          public static void main(String []args){
              Scanner input = new Scanner(System.in);
              System.out.print("Enter a String: ");
              String s = input.nextLine();
              String s1 = s.toLowerCase();
              char[] s2 = s1.toCharArray(); //Converts the String into a char Array
              char[] res = new char[s2.length];
      
              char LowerAlp[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
              char UpperAlp[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
      
              String lowerAlphabet = new String(LowerAlp);
      
              int i = 0;
              for (char aS2 : s2) {
                  res[i++] = UpperAlp[lowerAlphabet.indexOf(aS2)];
              }
      
              System.out.println(res);
          }
      }
      

      【讨论】:

        【解决方案4】:

        我的计划是创建两个包含小写字母和大写字母的数组

        听起来您对问题采取了错误的方法。

        而不是存储 2 个数组,HashMap 将是更好的选择。使用 HashMap,您可以将所有小写字符显式映射为大写字符。

        示例

        1。初始化HashMap

        HashMap<Character, Character> uppercaseAlphabet = new HashMap<Character, Character>();
        

        这将为您创建一个新的 HashMap,将字符映射到其他字符

        别忘了import java.util.HashMap

        2。用字母填充 HashMap

        uppercaseAlphabet.put('a', 'A');
        uppercaseAlphabet.put('b', 'B');
        uppercaseAlphabet.put('c', 'C');
        

        等等...您需要对字母表的其余部分执行此操作,否则您可能会遇到NullPointerException

        3。使用 HashMap

        char[] myLetters = "hello world!".toCharArray();
        
        for (char letter : myLetters) {
            if (uppercaseAlphabet.contains(letter) {
                char uppercaseLetter = uppercaseAlphabet.get(letter);
                System.out.print(uppercaseLetter);
            } else {
                System.out.print(letter);
            }        
        }
        

        此代码将...

        1. 遍历我的字符数组。
        2. 如果该字母在地图中,则获取对应的大写字母并打印出来。
        3. 否则,直接打印字符。

        这段代码不会在任何地方存储大写字符串,它只是打印它。您可以通过将每个字符附加到 StringBuilder 来使它变得更好。


        如果您想要一个更清洁的解决方案(我很遗憾没有想到),我会推荐 Mureinik 的。尽管如果您需要映射不具有这种一致模式的某些字符,HashMap 解决方案可能会很有用。

        【讨论】:

          猜你喜欢
          • 2013-04-21
          • 2011-07-21
          • 1970-01-01
          • 2014-11-07
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 2011-10-29
          • 2016-02-24
          相关资源
          最近更新 更多