做了一个测试字符串是否为回文字符串的小程序,结果让我囧了~~我是新手,没有很多分,请各位前辈指教package String;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;//判断是否为回文字符串
public class huiwenString {
public static void main(String[] args)
{
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
StringBuffer str = line1.reverse();
System.out.println(str);
if(line1.equals(str))
{
System.out.println("这是一个回文字符串");
}
else
{
System.out.println("这不是一个回文字符串!");
} } catch (IOException e) {
e.printStackTrace();
}
}
}运行结果:
请输入字符串:
123456
654321
这是一个回文字符串无论输入什么都说是回文字符串,尽管str和line1不相等,这是怎么回事呀,各位前辈指点一下迷津喂~
import java.io.IOException;
import java.io.InputStreamReader;//判断是否为回文字符串
public class huiwenString {
public static void main(String[] args)
{
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
StringBuffer str = line1.reverse();
System.out.println(str);
if(line1.equals(str))
{
System.out.println("这是一个回文字符串");
}
else
{
System.out.println("这不是一个回文字符串!");
} } catch (IOException e) {
e.printStackTrace();
}
}
}运行结果:
请输入字符串:
123456
654321
这是一个回文字符串无论输入什么都说是回文字符串,尽管str和line1不相等,这是怎么回事呀,各位前辈指点一下迷津喂~
把它变成StringBuffer
我的意图就是这样啊
public synchronized StringBuffer reverse() {
super.reverse();
return this;
}
reverse方法的返回是this 。
执行语句:StringBuffer str = line1.reverse();
执行之后:str:"654321",line1:"654321";
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
if (line1.reverse().toString().equals(line)) {
System.out.println("这是一个回文字符串");
} else {
System.out.println("这不是一个回文字符串!");
}
} catch (IOException e) {
e.printStackTrace();
}
public class Test2
{
public static void main(String [] args){
String str="aaabbaaa";
if(booleanIsPalindrome(str)){
System.out.println(str+" is a Palindrome");
}
else{
System.out.println(str+" is not a Palindrome");
}
}
public static boolean booleanIsPalindrome(String str){
String temp="";
boolean flag=false;
for(int i=str.length()-1;i>=0;i--){
temp+=str.charAt(i);
}
if(temp.equals(str)){
flag=true;
}
return flag;
}
}
偶做的
String[] strs = {
"1233521",
"123321",
"12321" // 这种算回文么?
};
for(int i = 0; i < strs.length; i++) {
System.out.println(strs[i] + " --> " + isPalindromic(strs[i]));
}
}
public static boolean isPalindromic(String str) {
if(str == null) {
return false; // null 算回文么?
}
if(str.length() == 0) {
return true; // 空字符串算回文么?
}
char[] chs = str.toCharArray();
for(int i = 0, k = chs.length / 2; i < k; i++) {
if(chs[i] != chs[chs.length - i - 1]) {
return false;
}
}
return true;
}
}
StringBuffer str = line1.reverse();这句话使得line1本身也被reverse了,所以line1和str的内容是相同的,所以
line1.equals(str)肯定是true,
应该用line1.equals(line).
改成这样:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class huiwenString {
public static void main(String[] args) {
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
line1.reverse();
System.out.println(line1);
if(line1.equals(line)) {
System.out.println("这是一个回文字符串");
} else {
System.out.println("这不是一个回文字符串!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面代码是这样的,不好意思:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class huiwenString {
public static void main(String[] args) {
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
line1.reverse();
System.out.println(line1);
if(line1.equals(line)) {
System.out.println("这是一个回文字符串");
} else {
System.out.println("这不是一个回文字符串!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
line1.reverse(); 这个动作其实在改变line1本身的字符串顺序。
所以
StringBuffer str = line1.reverse();
就是
str =line1;想偷懒 哼哼。自己多声明个中间的字符串来保存数据即可。
StringBuffer str1 = line1;
StringBuffer str = str1.reverse();