我试图创建一个回文检查器。我正在使用StringBuilder,我发现附加空格有点棘手。
当单词没有空格时,此代码有效:
public String palindrome (String anyString) {
StringBuilder sb = new StringBuilder();
for (int i = anyString.length()-1; i>=0; i--) {
sb.append(anyString.charAt(i));
}
String string2 = sb.toString();
return string2;
}
当输入的单词有空格时;它返回一个字符串,其中包含第一个空格的字符。
E.g:
word = "not a palindrome"
palindrome(word) = "emordnilap"
预期 =“emordnilap a ton”
我试过插入
if (anyString.charAt(i) != ' ')
sb.append(anyString.charAt(i));
else
sb.append(' ');
在代码中间,但它不起作用。
谢谢你们!
答案 0 :(得分:7)
使用StringBuilder.reverse()
方法,它可以faster (1378 line)更正确
StringBuilder sb = new StringBuilder("not a palindrome");
System.out.println(sb.reverse());
输出:
emordnilap一吨
答案 1 :(得分:2)
reverse
StringBuilder
方法
public String palindrome (String anyString) {
StringBuilder sb = new StringBuilder(anyString);
return sb.reverse().toString();
}
答案 2 :(得分:1)
public static boolean isPalindromeNaive(String s){
StringBuilder sb = new StringBuilder(s);
StringBuilder sbReverse = sb.reverse();
if (s.equals(String.valueOf(sbReverse))){
return true;
}
return false;
}
似乎不是您正在寻找的东西,但它只是供参考的完整方法。
答案 3 :(得分:1)
此答案允许您不计算您不想要的字符。
public boolean isPalindrome(String s) {
for (int left = 0, right = s.length()-1; ; left++, right--) {
while(left < right && !isAcceptableCharacter(s.charAt(left))) {
left++;
}
while(left < right && !isAcceptableCharacter(s.charAt(right))) {
right++;
}
if (left >= right) { return true; }
if (s.charAt(left) != s.charAt(right)) { return false; }
}
}
static boolean isAcceptableCharacter(char c) {
return Character.isLetter(c) || Character.isDigit(c);
}
答案 4 :(得分:0)
您应该在lowerCase中全部传递参数或者在UpperCase中传递全部参数,或者您也可以编写新方法来转换 String,StringBuffer,StringBuilder
//删除空格的方法“\ t”tabsapce和“\ n”换行“\ f”......
private StringBuilder removeUnwanted(StringBuilder strBuild){
String str = new String(strBuild);
str = str.replace("\n","").replace("\t","").replace("\f","").replace(" ","");
return new StringBuilder(str);
}
public boolean isPal(StringBuilder strBuild){
int flag = 0;
strBuild = removeUnwanted(strBuild);
for(int i = 0;i<strBuild.length()-1;i++){
if(strBuild.charAt(i) != strBuild.reverse().charAt(i)){
flag = 1;
break;
}
}
if(flag == 0)
return true;
else
return false;
}
答案 5 :(得分:0)
这是最简单的检查方法。
import java.util.*;
public class Main {
public static void main(String[] args) {
// write your code here
Scanner s = new Scanner(System.in);
System.out.println("Enter the string");
String st1 = s.nextLine();
String st2 = Palindrome(st1);
if (isPalindrome(st1,st2)==true)
{
System.out.println("palindrome");
}
else {
System.out.println("Not palindrome");
}
}
private static String Palindrome(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
return String.valueOf(stringBuilder.reverse());
}
private static boolean isPalindrome(String s1, String s2){
if (s1.equals(s2))
{
return true;
}
else {
return false;
}
}
}
答案 6 :(得分:0)
如果你只想要一个没有 String Builder 的回文检查器
private static boolean isPalindrome(String input) {
for (int i = 0, j = input.length() - 1; j >= i; i++, j--) {
if (input.charAt(i) != input.charAt(j))
return false;
}
return true;
}
但 StringBuilder 应该可以工作:
private static boolean isPalindrome(StringBuilder input) {
return input.toString().equals(input.reverse().toString());
}