Java,无法弄清楚如何从一个字符串中删除回文符号

时间:2013-11-07 06:54:35

标签: java string for-loop reverse palindrome

我在高中,这是我的任务,你们不在我的联盟,但我愿意学习和理解。我到处寻找,但我能找到的只是复杂的语法,我还不知道。这就是我所拥有的,它需要一个字符串并将其反转。我设法让它忽略了Capitals,但我无法弄清楚如何让它忽略符号。我在那里的数字来自ANSI字符,我在使用的textpad上有一个列表。不要害怕变得苛刻,我不擅长这个,我只想提高它就好了。

import java.util.Scanner;
public class PalindromeV2
{
    public static void main(String[] args)
    {
        //declare
        Scanner sc = new Scanner(System.in);
        String fwd, rev;
        String result;
        //input
        System.out.println("What word would you like to Palindrome test?");
        fwd = sc.next();
        rev = reverseString(fwd);
        result = stripPunctuation(fwd);

        if(stripPunctuation(rev).equals(stripPunctuation(fwd)))
        {
            System.out.println("That is a palindrome");
        }
        else
            System.out.println("That is not a palindrome");

    }
    public static String reverseString(String fwd)
    {
        String rev = "";
        for(int i = fwd.length()-1; i >= 0; i--)
        {
            rev += fwd.charAt(i);
        }
        return rev.toUpperCase();
    }

    public static String stripPunctuation(String fwd)
    {
        String result = "";
        fwd = fwd.toUpperCase();

        for(int i = fwd.length()-1; i >= 0; i--)
        {
            if((fwd.charAt(i)>=65 && fwd.charAt(i)<=90)||(fwd.charAt(i) >= 48 && fwd.charAt(i) <= 58));
            result = result + fwd.charAt(i);
        }
        return result;
    }
}

5 个答案:

答案 0 :(得分:0)

您可以将此作为检查条件

if (Character.isLetter(fwd.charAt(i)) {
    // do something
}

这将检查以确保字符是一个字母,因此您不必担心案例,数字或其他符号。

答案 1 :(得分:0)

如果你想从一些字符中删除你的字符串而不是那样的

clearString=targetStringForStripping.replaceAll([type_characters_for_stripping],"");

这将删除您将在方括号内提供的所有字符。 还有更多。如果你想说只留下字母(因为在回文中没有什么重要的,除了字母 - 空格并不重要),你只需要使用预定义的字符集 - 字母。 如果你这样做就结束所有

clearString=targetStringForStripping.replaceAll("[\w]","");

clearString=targetStringForStripping.replaceAll("[^a-zA-Z]","");

在第一个示例中,您将获得带有白色字符的明确字符串,而第二个示例中只有字母。 isPalindrom解决方案的完美情况。

答案 2 :(得分:0)

if((fwd.charAt(i)>=65 && fwd.charAt(i)<=90)||(fwd.charAt(i) >= 48 && fwd.charAt(i) <= 58));
你终于有了分号了。所以我认为如果条件在这里没有用

答案 3 :(得分:0)

由于这是一项高中课程,我只想提出一些建议,你可以自己解决。

  1. 考虑要包含/排除的内容,然后编写代码。 请记住,只要您不想处理复杂的字符编码,就可以使用<>运算符比较char变量。

  2. 字符串实际上只是一系列字符,您可以逐个比较或重新排序,包含或排除。

  3. 方法应该只做一件事,而不是很多事情。看看您的reverseString方法。这是在同一时间对您的字符串执行toUpperCase。如果你的程序变得更复杂,那么这种做事方式并不容易理解。

  4. 最后,如果你是只想在你的回文检查中包含大写字母,然后尝试这样的代码:

    char[] toCheck = fwd.toCharArray();
    for (char c : toCheck) {
      if (c >= 'A' && c <= 'Z') {
        result = result + c;
      }
    }
    

    根据您的要求,这可能会做您想要的。如果你想要不同的东西,看看我上面给出的提示。

答案 4 :(得分:0)

Java高尔夫?

public static String stripPunctuation(String stripThis) {
    return stripThis.replaceAll("\\W", "");
}