繁体   English   中英

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

[英]Java, cant figure out how to strip symbols from a String for a Palindrome

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

您可以将其用作检查条件

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

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

如果您想从某些字符集中删除字符串,而不要做类似的事情

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

这将删除您将在方括号内提供的所有字符。 还有更多。 如果您只想说只留下字母(因为在回文中,除了字母,其他都没关系-空格并不重要),那么您只能使用预定义字符集-字母。 总结一切,如果你做

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

要么

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

在第一个示例中,您将获得带白色字符的清晰字符串,而在第二个示例中,将仅获得字母。 isPalindrom分辨率的isPalindrom情况。

if((fwd.charAt(i)>=65 && fwd.charAt(i)<=90)||(fwd.charAt(i) >= 48 && fwd.charAt(i) <= 58));

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

由于这是一项高中作业,因此我只给出一些建议,您可以自己解决。

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

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

  3. 方法只能做一件事,而不是很多事。 看看您的reverseString方法。 这是同时对字符串执行toUpperCase 如果您的程序变得更加复杂,则这种处理方式将不容易遵循。

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

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

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

爪哇高尔夫?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM