我已经将整数转换为字符串并将其反转,但是在运行时。它总是返回错误的答案。
var x = 121;
var numba = x.ToString();
char[] strArray = numba.ToCharArray();
Array.Reverse(strArray);
StringBuilder newString = new StringBuilder();
StringBuilder newString2 = new StringBuilder();
foreach(var item in strArray)
{
newString.Append(item);
}
foreach(var item in numba.ToCharArray())
{
newString2.Append(item);
}
Console.WriteLine(newString);
Console.WriteLine(newString2);
if(newString == newString2)
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
都是印刷121;但是,它不是返回true吗? StringBuilder有点这种情况吗?
如果从以下位置替换if语句:
if(newString == newString2)
至:
if(newString.Equals(newString2))
您的问题将得到解决。
当在类型object的表达式上使用==时,它将解析为System.Object.ReferenceEquals。
Equals只是一个虚拟方法,其行为与此相同,因此将使用覆盖的版本(对于字符串类型,它比较内容)。
作为旁注,您还可以使用如下代码简化逻辑:
var x = 121;
var numStr = x.ToString();
var numArray = numStr.ToCharArray();
Array.Reverse(numArray);
var revStr = new string(numArray);
Console.WriteLine(numStr + "\n" + revStr);
if(numStr.Equals(revStr))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
这可能不是最理想的代码,但是比您的方法更易于管理。
这不是StringBuilder
的“边缘情况”,它只是意味着StringBuilder
类不会覆盖==
运算符,因此您将获得两个对象之间的默认引用比较。
要比较它们表示的字符串,可以对在ToString()
对象上调用StringBuilder
的结果进行比较:
if(newString.ToString() == newString2.ToString())
但是实际上,您似乎在这里做了很多额外的工作,要复制字符串,然后进行全面比较。相反,只需要简单地从两端到中间遍历字符串,就可以比较字符:
var x = 121;
var numba = x.ToString();
// Get the length of half the string
int halfLength = numba.Length / 2;
// Start assuming it is a palindrome
bool isPalindrome = true;
// Compare a character from the beginning of the string
// with it's corresponding character at the end. If the
// characters do not match, it's not a palindrome.
for (int i = 0; i < halfLength; i++)
{
if (numba[i] != numba[numba.Length - i - 1])
{
// The characters don't match, it's not a palindrome
isPalindrome = false;
break;
}
}
// Output the result
Console.WriteLine(isPalindrome);
检查回文的简单方法-
static bool IsPlaindrome(string inputString)
{
if (string.IsNullOrEmpty(inputString))
return false;
var characters = inputString.ToCharArray();
var stringLength = characters.Length;
for (int i = 0; i < characters.Length/2; i++)
{
if (characters[i].Equals(characters[stringLength - 1 - i]))
continue;
else
return false;
}
return true;
}
用法
var result = IsPlaindrome("asdffdsa");