Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 回文法逻辑错误_Java - Fatal编程技术网

Java 回文法逻辑错误

Java 回文法逻辑错误,java,Java,我正在编写一个方法,当传递一个字符串时,如果它是回文,则返回'true',如果它不是回文,则返回'false'。该方法在返回回文时忽略任何标点符号和空格。当我试图传递字符串“Hannah”时,它返回false public static boolean isPalindrome(String p){ String backwardsOriginal = ""; String blank = ""; for(int i =0; i< p.length();i++){ S

我正在编写一个方法,当传递一个字符串时,如果它是回文,则返回'true',如果它不是回文,则返回'false'。该方法在返回回文时忽略任何标点符号和空格。当我试图传递字符串“Hannah”时,它返回false

public static boolean isPalindrome(String p){
  String backwardsOriginal = "";
  String blank = "";
  for(int i =0; i< p.length();i++){
     String lookAt = p.substring(i,i+1).toLowerCase();
     if ((!lookAt.equals(" ")) || (!lookAt.equals(",")) || (!lookAt.equals(".")) || (!lookAt.equals("!")) ||(!lookAt.equals("?"))) {
        blank+=lookAt.toLowerCase();
     }

  }
     for(int j=blank.length();j>=0;j--){
        if(j==0)
           backwardsOriginal +=blank.substring(0,j+1).toLowerCase();
        else
           backwardsOriginal += blank.substring(j-1,j).toLowerCase();
     }
        boolean k = true;
        int first = 0;
        int last = blank.length()-1;
        int ct = 0;
        while(k && (ct != blank.length())){
           if (last == 0) {
              if (blank.substring(blank.length()-1) != backwardsOriginal.substring(0,blank.length())) {
                 k=false;
              }
           } else if (last > 0) {
              if(blank.substring(first, first+1).equals(backwardsOriginal.substring(last-1,last))) {
                 k=true;
                 first++;
                 last--;
              } else {
                 k=false;
              }
           }
        }
        return k;  
     }
public静态布尔值isAlindrome(字符串p){
字符串backwardsOriginal=“”;
字符串空白=”;
对于(int i=0;i=0;j--){
如果(j==0)
backwardsOriginal+=blank.substring(0,j+1).toLowerCase();
其他的
backwardsOriginal+=blank.substring(j-1,j.toLowerCase();
}
布尔k=真;
int first=0;
int last=blank.length()-1;
int-ct=0;
而(k&(ct!=blank.length()){
如果(最后==0){
if(blank.substring(blank.length()-1)!=backwardsOriginal.substring(0,blank.length())){
k=假;
}
}否则如果(最后一次>0){
if(blank.substring(first,first+1).equals(backwardsOriginal.substring(last-1,last))){
k=真;
第一++;
最后--;
}否则{
k=假;
}
}
}
返回k;
}

我将从一个正则表达式开始,将所有内容转换为非单词字符(这是一个特殊的类regex
\W
,单词是
\W
——在Java中,我们必须为模式转义
\
)。然后,我将小写并将结果转换为
char[]
。然后,您只需迭代数组长度的一半-如果任何字符不在正确的位置
返回false
-如果到达末尾,它就是回文。像

public static boolean isPalindrome(String p) {
    char[] arr = p.replaceAll("\\W", "").toLowerCase().toCharArray();
    int len = arr.length;
    for (int i = 0; i < len / 2; i++) {
        if (arr[i] != arr[len - i - 1]) {
            return false;
        }
    }
    return true;
}
public static boolean isPalindrome(String p) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < p.length(); i++) {
        char ch = Character.toLowerCase(p.charAt(i));
        if (Character.isLetter(ch)) {
            sb.append(ch);
        }
    }
    int len = sb.length();
    for (int i = 0; i < len / 2; i++) {
        if (sb.charAt(i) != sb.charAt(len - i - 1)) {
            return false;
        }
    }
    return true;
}
(这是
真的
)。并且,根据您在注释中更新的限制,您可以使用
StringBuilder
实现相同的算法(但是您需要两个循环,一个用于构建“正确的”
字符串
,另一个用于测试它是否是回文)。像

public静态布尔值isAlindrome(字符串p){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
建议,使用
replaceAll
替换所有
使用空字符串,然后在字母上迭代,这将使程序更容易。抱歉,我忘了提到我不允许使用数组、replace、replaceAll或replaceFirst。
public static boolean isPalindrome(String p) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < p.length(); i++) {
        char ch = Character.toLowerCase(p.charAt(i));
        if (Character.isLetter(ch)) {
            sb.append(ch);
        }
    }
    int len = sb.length();
    for (int i = 0; i < len / 2; i++) {
        if (sb.charAt(i) != sb.charAt(len - i - 1)) {
            return false;
        }
    }
    return true;
}