一个关于java函数和不同字符串方法使用的问题



希望大家都好....我有一个非常复杂的疑问在java中,在函数回文我使用这个函数compareTo函数来测试我的程序工作正常与否我也使用过=函数,返回我的错误即使两个字符串是完全可以测试它我使用toCompare函数应该返回0,如果字符串是回文但不是返回我零取而代之的是给我分别在87年和77年分别对妈妈和哇,请任何人帮助我解决这个疑问…请见....我的代码图像我的代码图像

import java.util.*;
public class functions{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
String str;
char[] ch = new char[20];
System.out.println("Enter the String");
str=s.nextLine();
for(int i=0; i<str.length(); i++)
{
ch[i] = str.charAt(i);
}
System.out.println("String before reversal :"+str);
reverseString(ch);
String str1=String.valueOf(ch);
System.out.println("String after reversal :"+str1);
/*if(isPalindrome(ch))
{
System.out.println("String is a Palindrome");
}
else
{
System.out.println("String is not a Palindrome");
}*/
boolean test = isPalindrome(ch);
System.out.println(test);
}
public static void reverseString(char[] ch)
{
String str= String.valueOf(ch);
int j=0;
for(int i=str.length()-1;i>=0;i--)
{
ch[j]=str.charAt(i);
j++;
}
}
public static boolean isPalindrome(char[] ch)
{
String str=String.valueOf(ch);
reverseString(ch);
String str1=String.valueOf(ch);
System.out.println(str);
System.out.println(str1);
System.out.println(str1.compareTo(str));
if(str.equalsIgnoreCase(str1)){
return true;
}
else{
return false;
}
}

}

您的问题是您创建了一个固定长度为20的数组。所以当你输入&;wow &;这样,该数组中仍有17个部分被char默认值'u0000'填充。

这是因为方法String.valueOf(char data[])将简单地复制传递的char数组并使用该副本作为其后台数组。

虽然这可能不会对打印字符串产生影响,但它会导致反向字符串不被认为等于原始字符串,因为一个备份数组以17个'u0000'值开始并以'W', 'O', 'W'结束,而另一个从'W', 'O', 'W'开始并以17个'u0000'值结束。

要解决这个问题,只需在用户输入字符串后声明一个动态长度的char数组:

System.out.println("Enter the String");
str = s.nextLine();
char[] ch = new char[str.length()];

我会这样做:

public boolean isPalindrome(String theString) {

String reverse = new StringBuilder(theString).reverse().toString();
boolean result = false;
if(theString.equalsIgnoreCase(reverse)) {
result = true;
}
return result;
}

…或者你想知道为什么你的解决方案没有像预期的那样工作?那我道歉。别人已经解释得很清楚了:)