簡體   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