2

我在高中,这是我的任务,你们不在我的联盟,但我愿意学习和理解。我到处看了看,但我能找到的只是我还不知道的复杂语法。这就是我所拥有的,它需要一个字符串并将其反转。我设法让它忽略大写字母,但我不知道如何让它忽略符号。我那里的数字来自 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;
    }
}
4

5 回答 5

0

爪哇高尔夫?

public static String stripPunctuation(String stripThis) {
    return stripThis.replaceAll("\\W", "");
}
于 2013-11-07T07:13:29.400 回答
0

您可以将其用作检查条件

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

这将检查以确保字符是字母,因此您不必担心大小写、数字或其他符号。

于 2013-11-07T07:06:26.277 回答
0

如果你想从一组字符中去掉你的字符串而不是做类似的事情

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

这将删除您将在方括号内提供的所有字符。还有更多。如果您只想说只留下字母(因为在回文中,除了字母之外什么都不重要 - 空格并不重要),那么您可以简单地使用预定义字符集 - 字母。总结一下,如果你这样做

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

或者

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

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

于 2013-11-07T07:07:46.203 回答
0
if((fwd.charAt(i)>=65 && fwd.charAt(i)<=90)||(fwd.charAt(i) >= 48 && fwd.charAt(i) <= 58));

你终于有了分号。所以我认为如果条件在这里没有用

于 2013-11-07T07:07:58.127 回答
0

由于这是高中作业,我只是给出一些指示,你会自己弄清楚。

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

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

  3. 一个方法应该只做一件事,而不是很多事情。看看你的reverseString方法。这同时toUpperCase对您的字符串进行了处理。如果你的程序变得更复杂,这种做事方式就不容易遵循。

最后,如果您只想在回文检查中包含大写字母,请尝试以下代码:

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

根据您的要求,这可能会满足您的需求。如果您想要不同的东西,请查看我上面给出的提示。

于 2013-11-07T07:10:57.567 回答