字符串转换为Char然后转换为Int

时间:2015-03-28 15:14:05

标签: java string casting type-conversion character

我正在为学校写一个回文功能,它将采用字符串参数并删除所有标点符号。出于我的课程的目的,我必须使用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);
        }
    }

2 个答案:

答案 0 :(得分:0)

Character#valueOf(char c)方法适用于角色和 由JavaDoc表示substring()

public String substring() 

方法返回String,所以你不能在这里使用Character#valueOf方法

答案 1 :(得分:0)

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

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

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

然后要测试它是否是一封信,你可以使用

Character.isLetter(myChar[0]);

当你施放

时要小心
(int)Character.valueOf(...)

Character返回的valueOf()对象不是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