Java 如何忽略大小写并考虑字母数字字符
我正在尝试检查有效的字符串回文。但是,我设置它的方式只有在这些行中没有任何特殊字符(如“,”或“:”或类型)时才起作用 也就是说,当我有“nitin”或“nitin nitin”这个词的时候,这个词就起作用了,但当我有“nitin,nitin”或“一个人,一个计划,一条运河:巴拿马”的时候就不起作用了 我做错什么了吗Java 如何忽略大小写并考虑字母数字字符,java,Java,我正在尝试检查有效的字符串回文。但是,我设置它的方式只有在这些行中没有任何特殊字符(如“,”或“:”或类型)时才起作用 也就是说,当我有“nitin”或“nitin nitin”这个词的时候,这个词就起作用了,但当我有“nitin,nitin”或“一个人,一个计划,一条运河:巴拿马”的时候就不起作用了 我做错什么了吗 class Solution { public boolean isPalindrome(String s) { // ex: string = "nit
class Solution {
public boolean isPalindrome(String s) {
// ex: string = "nitin"
String newS = s.toUpperCase();
int start = 0;
int end = s.length() - 1;
boolean isPalindrome = true;
while(start < end)
{
if(newS.charAt(start) != newS.charAt(end))
{
isPalindrome = false;
break;
}
start++;
end--;
}
if(isPalindrome)
{
return true;
}
else{
return false;
}
}
}
类解决方案{
公共布尔值isAlindrome(字符串s){
//例如:string=“nitin”
字符串newS=s.toUpperCase();
int start=0;
int end=s.length()-1;
布尔值isAlindrome=true;
while(开始<结束)
{
if(newS.charAt(开始)!=newS.charAt(结束))
{
isAlindrome=false;
打破
}
启动++;
结束--;
}
if(isPalindrome)
{
返回true;
}
否则{
返回false;
}
}
}
在检查字符串是否为回文之前,可以从字符串中删除所有非字母数字字符
例如:
public boolean isPalindrome(String s) {
String alphanumeric = s.replace(',', '');
// ...
这将把nitin,nitin
变成nitin-nitin
但是,一次只能替换一个字符。
您应该研究该方法,对于该方法,您可以使用正则表达式来匹配所有非字母数字
匹配非字母数字的正则表达式如下所示已编辑:
public class Main {
public static boolean isPalindrome(String s) {
// ex: string = "nitin"
String newS = s.toLowerCase();
newS = newS.replaceAll("[^a-zA-Z0-9]", "");
if (newS.isEmpty()) {
return false;
}
int start = 0;
int end = newS.length() - 1;
while (start < end) {
if (newS.charAt(start) != newS.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
public static void main(String[] args) {
System.out.println(isPalindrome(""));
System.out.println(isPalindrome("nitin"));
System.out.println(isPalindrome("123454321"));
System.out.println(isPalindrome("A man, a plan, a canal: Panama"));
}
您可以按如下方式进行操作:
class Solution {
public static void main(String[] args) {
System.out.println(isPalindrome("Nitin"));
System.out.println(isPalindrome("Ni tin"));
System.out.println(isPalindrome("N,it + in"));
System.out.println(isPalindrome("Ni2ti3n"));
System.out.println(isPalindrome("123454321"));
}
public static boolean isPalindrome(String s) {
// Remove all non-alphabet and non-digit characters and change the case of the
// resulting String to upper case
String newS = s.replaceAll("[^a-zA-Z0-9]", "").toUpperCase();
int start = 0;
int end = newS.length() - 1;
while (start < end) {
if (newS.charAt(start) != newS.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}
“我做错什么了吗?”-是的,你没有忽略非字母字符。这回答了你的问题吗?如果不是字母则跳过:旁注:您可以将最后一个
if/else
替换为justreturn isPalindrome代码>String stripped=s.replaceAll(“\W”,”).toLowerCase()
应该会将您带到一个只剩下字符的地方。如果我采用这种方法,我会遇到字符串索引超出范围的问题:(“int end=s.length()-1”应该是“int end=newS.length()-1”,但是如果我的字符串是“123454321”,会发生什么情况。由于使用了德语SS,因此最好将其转换为小写而不是大写。因此,如果我的字符串为“123454321”,会发生什么情况?回文通常只忽略空格和标点符号。其他所有内容应前后相同。现在看起来不错。
class Solution {
public static void main(String[] args) {
System.out.println(isPalindrome("Nitin"));
System.out.println(isPalindrome("Ni tin"));
System.out.println(isPalindrome("N,it + in"));
System.out.println(isPalindrome("Ni2ti3n"));
System.out.println(isPalindrome("123454321"));
}
public static boolean isPalindrome(String s) {
// Remove all non-alphabet and non-digit characters and change the case of the
// resulting String to upper case
String newS = s.replaceAll("[^a-zA-Z0-9]", "").toUpperCase();
int start = 0;
int end = newS.length() - 1;
while (start < end) {
if (newS.charAt(start) != newS.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}
true
true
true
false
true