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

String converting to Char and then to Int

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

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

我现在的主要问题是,当我尝试编译程序时,出现错误,指出子字符串无法转换为字符。有什么想法吗?

  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);
        }
    }

Character#valueOf(char c) 方法适用于字符和 As JavaDoc 表示 substring()

public String substring() 

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

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

如果 String#charAt() 被禁止,那么您可以使用 String#toCharArray() 将 return 一个 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