1.题目
2.知识点
注1:在 Java 中,toString() 方法用于将对象转换为字符串表示形式。对于数组对象,toString() 方法将返回数组的字符串表示形式,其中包含数组中每个元素的字符串表示形式,以逗号分隔,并且包含在方括号中。
//toString 字符变成字符串
// 测试示例
char[] s = {'H', 'e', 'l', 'L', 'o'};
solution.toLowerCase(s);
System.out.println(Arrays.toString(s));
// 输出 ["h", "e", "l", "l", "o"]
注2:if (Character.isUpperCase(s[i])) // 检查字符是否为大写字符
s[i] = Character.toLowerCase(s[i]); // 将大写字符转换为小写字符
将字符数组中的所有大写字符转换为小写字符 步骤
用Character.isUpperCase(s[i])查找字符是不是大写的
再用Character.toLowerCase(s[i]) 将大写字符换成小写字符
注3:并移除所有非字母数字字符之后
Character.isLetterOrDigit(s[i]) 是 Java 中的一个方法调用,用于检查给定的字符 s[i] 是否是字母或数字字符。
具体来说,Character.isLetterOrDigit() 方法返回一个布尔值,表示给定的字符是否是字母或数字字符。如果字符是字母(大写或小写)或数字字符,则返回 true,否则返回 false。
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
char[] s = {'H', 'e', 'l', 'l', 'o', '!', '2', '#', 'w', 'o', 'r', 'l', 'd'};
removeNonAlphanumeric(s);
System.out.println(Arrays.toString(s)); // 输出 ["H", "e", "l", "l", "o", "2", "w", "o", "r", "l", "d"]
}
public static void removeNonAlphanumeric(char[] s) {
int count = 0;
for (int i = 0; i < s.length; i++) {
if (Character.isLetterOrDigit(s[i])) {
}
}
Arrays.fill(s, count, s.length, '\0'); // 将剩余部分填充为'\0',可选操作,不影响结果
}
}
注4:**count++ 是一个后缀递增操作符。它的作用是先将 count 的当前值用于赋值给 s[i],然后再将 count 的值递增 1。**这样,s[i] 就被赋值为 s[count] 的当前值,然后 count 递增,指向下一个位置。
所以,s[count++] = s[i] 的含义是将字符数组 s 中的第 i 个位置的字符赋值给 s 中的第 count 个位置,并将 count 递增。这样就实现了将字母或数字字符移到数组的前面。
注5:Java 中的字符串是不可变的,所以您不能直接对字符串进行修改。需要使用 StringBuilder 或者其他可变的数据结构来实现字符串的修改操作。
Character.isUppercase(s[i]) 是错误的方法调用,应该是 Character.isUpperCase(s.charAt(i))。
Character.isLetterorDigit(s[i]) 也是错误的方法调用,应该是 Character.isLetterOrDigit(s.charAt(i))。
Character.toLowecase(s[i]) 是错误的方法调用,应该是 Character.toLowerCase(s.charAt(i))。
cnt[i++]=s[i] 是错误的用法,因为 cnt 应该是一个整数变量,而不是数组。
注6:for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLetterOrDigit(ch)) {
sb.append(Character.toLowerCase(ch));
}
}
StringBuilder sb = new StringBuilder();
// 将字符串转换为只包含字母数字字符的形式,并转换为小写
for (char ch : s.toCharArray()) {
if (Character.isLetterOrDigit(ch)) {
sb.append(Character.toLowerCase(ch));
}
}
注6:回文串用左右指针,然后再用charAt()方法
3.代码实现
class Solution {
public boolean isPalindrome(String s) {
StringBuilder sb=new StringBuilder();//StringBuilder存储的是可变的字符结构
for(int i=0;i<s.length();i++)//将所有大写字符转换为小写字符、并移除所有非字母数字字符之后
{
char ch=s.charAt(i);//字符
if(Character.isLetterOrDigit(ch))//判断是不是字符
{ sb.append(Character.toLowerCase(ch));}
}
//判断是不是回文串
int left=0;//左指针指向起始位置
int right=sb.length()-1;//右指针指向末尾位置
while(left<right)
{
if(sb.charAt(left)!=sb.charAt(right))
{
return false;
}
left++;
right--;
}
return true;
}
}