【问题标题】:String converting to Char and then to Int字符串转换为 Char 然后转换为 Int
【发布时间】:2015-03-28 15:14:04
【问题描述】:

我正在为学校编写一个回文函数,它将接受一个字符串参数并删除所有标点符号。就我的课程而言,我必须使用 substring() 方法。

我的代码基本上采用字符串参数中每个字符的子字符串并将其转换为 char,然后再转换为 int。然后,它检查该整数是否在 a-z 或 A-Z 的 ASCII 数字内,如果是,则将该子字符串附加到空白字符串 (s2)。

我现在的主要问题是,当我尝试编译程序时,我收到一条错误消息,指出无法将子字符串转换为 char。关于为什么的任何想法?

  public Palindrome(String s)
    {
        for(int i = 0; i < s.length(); i++)
        {
//                                      checks if the character is an uppercase letter
            if((int) Character.valueOf(s.substring(i, i + 1)) >= 65)
                if((int) Character.valueOf(s.substring(i, i + 1)) <= 90)
                    s2 += s.substring(i, i+1);
//                                      checks if the character is a lowercase letter
            if((int) Character.valueOf(s.substring(i, i + 1)) >= 97)
                if((int) Character.valueOf(s.substring(i, i + 1)) <= 122)
                    s2 += s.substring(i, i+1);
        }
    }

【问题讨论】:

    标签: java string casting type-conversion character


    【解决方案1】:

    String 对象不是Characterchar,即使String 的长度为1。强制转换只是试图欺骗编译器,它不会改变实际的底层对象。

    如果String#charAt() 被禁止,那么您可以使用String#toCharArray(),它将返回char[](在您的情况下长度为1)。例如

    char[] myChar = s.substring(i, i + 1);
    // myChar[0] contains the character
    

    然后判断是不是字母,可以使用

    Character.isLetter(myChar[0]);
    

    当你施放时要注意

    (int)Character.valueOf(...)
    

    valueOf() 返回的Character 对象不是char。它实际上会起作用,因为编译器会对Characterchar 进行一些拆箱

    如果你想使用 ASCII 码代替Character#isLetter(),你可以这样做:

    char[] myChar = s.substring(i, i + 1);
    int theCharAsInt = (int)myChar[0];
    // proceed to test the range 
    

    因为原生 char 值可以被读取为原生 int 值。

    int codeA = (int)'A';  // codeA == 65
    

    【讨论】:

      【解决方案2】:

      Character#valueOf(char c) 方法适用于字符和 正如JavaDoc 所说的子字符串()

      public String substring() 
      

      方法返回字符串,所以这里不能使用Character#valueOf方法

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 2018-09-18
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        相关资源
        最近更新 更多