我正在为学校写一个回文功能,它将采用字符串参数并删除所有标点符号。出于我的课程的目的,我必须使用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);
}
}
答案 0 :(得分:0)
Character#valueOf(char c)方法适用于角色和 由JavaDoc表示substring()
public String substring()
方法返回String,所以你不能在这里使用Character#valueOf
方法
答案 1 :(得分:0)
String
对象不是 Character
或char
,即使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
。它实际上会起作用,因为编译器会对Character
到char
进行一些取消装箱。
如果您想使用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