【问题标题】:Converting a char to uppercase将字符转换为大写
【发布时间】:2011-04-11 10:04:17
【问题描述】:
String lower = Name.toLowerCase();
int a = Name.indexOf(" ",0);
String first = lower.substring(0, a);
String last = lower.substring(a+1);
char f = first.charAt(0);
char l = last.charAt(0);
System.out.println(l);

如何将 F 和 L 变量转换为大写。

【问题讨论】:

  • 上一个问题的答案有哪些你不明白?我的回答包含对这个问题的回答。
  • @shep - 你能接受 BalusC 的回答吗?它将帮助未来的搜索者。

标签: java char uppercase


【解决方案1】:

您可以尝试使用布尔运算进行以下转换,而不是使用现有的实用程序:

转大写:

 char upperChar = 'l' & 0x5f

小写:

   char lowerChar = 'L' ^ 0x20

工作原理:

二进制、十六进制和十进制表:

------------------------------------------
| Binary   |   Hexadecimal     | Decimal |
-----------------------------------------
| 1011111  |    0x5f           |  95     |
------------------------------------------
| 100000   |    0x20           |  32     |
------------------------------------------

我们举个小lL转换的例子:

二元与运算:(l & 0x5f)

l 字符具有 ASCII 108,01101100 是二进制表示。

   1101100
&  1011111
-----------
   1001100 = 76 in decimal which is **ASCII** code of L

Ll 的转换类似:

二进制异或运算:(L ^ 0x20)

   1001100
^  0100000
-----------
   1101100 = 108 in decimal which is **ASCII** code of l

【讨论】:

  • 我真的很震惊,这有 7 票。虽然我为这种聪明的方法喝彩,但聪明很少会导致可维护的代码,尤其是在代替像Character.toUpperCase() 这样的内置方法时。任何用户都应该明白它不会处理任何非 ASCII 的东西。
  • @AdamHewitt 这种方法也适用于非 ASCII 字符,例如'250',然而,很少有非 ASCII 字符不会给出预期的结果。你的观点是正确的,用户应该理解这种方法的正确用法,它应该主要用于英文字母。
  • 我认为小写应该是c | 0x20 而不是c ^ 0x20。否则,如果字符已经是小写,您的代码会将其转换为大写
【解决方案2】:

我认为您正在尝试将句子中每个单词的第一个和最后一个字符大写,并以空格作为分隔符。

可以通过StringBuffer:

public static String toFirstLastCharUpperAll(String string){
    StringBuffer sb=new StringBuffer(string);
        for(int i=0;i<sb.length();i++)
            if(i==0 || sb.charAt(i-1)==' ' //for first character of string/each word
                || i==sb.length()-1 || sb.charAt(i+1)==' ') //for last character of string/each word
                sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
     return sb.toString();
}

【讨论】:

    【解决方案3】:
    System.out.println(first.substring(0,1).toUpperCase()); 
    System.out.println(last.substring(0,1).toUpperCase());
    

    【讨论】:

    • 你能解释一下你的答案吗?
    • first.substring(0,1) 将检索位于字符串 0 索引处的子字符串,然后将 toUpperCase 方法应用于该字符串,该方法将为您提供该字符串中的第一个字符为大写
    【解决方案4】:

    您可以将 .toUpperCase() 直接应用于字符串变量或作为文本字段的属性。例如:-

    String str;
    TextView txt;
    
    str.toUpperCase();// will change it to all upper case OR
    txt.append(str.toUpperCase());
    txt.setText(str.toUpperCase());
    

    【讨论】:

      【解决方案5】:

      既然你知道字符是小写的,你可以减去相应的 ASCII 值使它们变成大写:

      char a = 'a';
      a -= 32;
      System.out.println("a is " + a); //a is A
      

      这是一个ASCII table 供参考

      【讨论】:

      • 这仅适用于字符串仅由 ASCII 字符组成的情况。法语、希腊语、西班牙语、土耳其语等语言具有大写/小写形式的非 ASCII 字符。这种方法在这些情况下不起作用...
      • 实际上这种基本方法确实适用于法语、西班牙语、德语中最常见的非 ASCII 字符...例如é à ö û ñ ...所以如果OP知道他只需要处理这些字符,他可以为了简单和性能而坚持这种方法。跨度>
      • 用字符进行计算以改变大小写是最糟糕的习惯之一,因此不是 21 世纪!不仅仅是 ascii 字符!
      【解决方案6】:

      您可以为此使用Character#toUpperCase()

      char fUpper = Character.toUpperCase(f);
      char lUpper = Character.toUpperCase(l);
      

      但是它有一些限制,因为世界知道的字符比 16 位 char 范围内所能容纳的字符多得多。另请参阅javadoc 的以下摘录:

      注意:此方法无法处理supplementary characters。要支持所有 Unicode 字符,包括补充字符,请使用 toUpperCase(int) 方法。

      【讨论】:

        【解决方案7】:

        如果您在项目中包含 apache commons lang jar,那么最简单的解决方案就是:

        WordUtils.capitalize(Name)
        

        为您处理所有肮脏的工作。 请参阅 javadoc here

        另外,您还有一个 capitalizeFully(String) 方法,它也将其余字符小写。

        【讨论】:

        • 您提供的link 出现404 错误!!!!你能改正吗??
        【解决方案8】:

        最简单的解决方案 - 更改第一行,让它做相反的事情:

        String lower = Name.toUpperCase ();
        

        当然,改名也是值得的。

        【讨论】:

          【解决方案9】:

          看看java.lang.Character类,它提供了很多有用的方法来转换或测试字符。

          【讨论】:

          • +1 我喜欢为用户提供参考以寻求答案的答案
          • -1,如果我们为学生拉网,我们会删除 SO 的主要好处之一。不要花费过多的时间来跟踪人们在断开的链接中的嵌套参考。
          【解决方案10】:
          f = Character.toUpperCase(f);
          l = Character.toUpperCase(l);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-09-16
            • 2014-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-24
            • 1970-01-01
            相关资源
            最近更新 更多