Java,无法弄清楚如何从回文字符串中删除符号
Posted
技术标签:
【中文标题】Java,无法弄清楚如何从回文字符串中删除符号【英文标题】:Java, cant figure out how to strip symbols from a String for a Palindrome 【发布时间】:2013-11-18 17:33:25 【问题描述】:我在读高中,这是我的任务,你们不合我意,但我愿意学习和理解。我到处看了看,但我能找到的只是我还不知道的复杂语法。这就是我所拥有的,它需要一个字符串并将其反转。我设法让它忽略大写字母,但我不知道如何让它忽略符号。我那里的数字来自 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;
【问题讨论】:
您的代码运行良好。什么问题? 你试过正则表达式吗?这似乎是一种更简单的方法。 【参考方案1】:您可以将其用作检查条件
if (Character.isLetter(fwd.charAt(i))
// do something
这将检查以确保字符是字母,因此您不必担心大小写、数字或其他符号。
【讨论】:
【参考方案2】:如果你想把你的字符串从一组字符中去掉而不是做类似的事情
clearString=targetStringForStripping.replaceAll([type_characters_for_stripping],"");
这将删除您在方括号内提供的所有字符。 还有更多。如果您只想说只留下字母(因为在回文中,除了字母之外什么都不重要 - 空格并不重要),那么您可以简单地使用预定义字符集 - 字母。 如果你这样做了,总结一下
clearString=targetStringForStripping.replaceAll("[\w]","");
或
clearString=targetStringForStripping.replaceAll("[^a-zA-Z]","");
您将在第一个示例中获得带有白色字符的清晰字符串,而在第二个示例中只有字母。 isPalindrom
分辨率的完美情况。
【讨论】:
【参考方案3】:if((fwd.charAt(i)>=65 && fwd.charAt(i)<=90)||(fwd.charAt(i) >= 48 && fwd.charAt(i) <= 58));
你终于有了分号。所以我认为如果条件在这里没有用处
【讨论】:
【参考方案4】:由于这是高中作业,我只是给出一些指示,你会自己解决。
想想你想要包含/排除什么,然后编写代码。
请记住,只要您不想处理复杂的字符编码,就可以使用 <
或 >
运算符比较 char 变量。
字符串实际上只是一个字符序列,您可以逐个比较或重新排序、包含或排除这些字符。
一个方法应该只做一件事,而不是很多事情。看看你的reverseString
方法。这同时对您的字符串执行toUpperCase
。如果您的程序变得更加复杂,那么这种处理方式就不容易遵循。
最后,如果你例如只想在回文检查中包含大写字母,然后尝试以下代码:
char[] toCheck = fwd.toCharArray();
for (char c : toCheck)
if (c >= 'A' && c <= 'Z')
result = result + c;
根据您的要求,这可能会满足您的需求。如果您想要不同的东西,请查看我上面给出的提示。
【讨论】:
【参考方案5】:Java 高尔夫?
public static String stripPunctuation(String stripThis)
return stripThis.replaceAll("\\W", "");
【讨论】:
以上是关于Java,无法弄清楚如何从回文字符串中删除符号的主要内容,如果未能解决你的问题,请参考以下文章
Java面试手册-算法篇给定一个非空字符串,最多删除一个字符,判断是否能成为回文字符串
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。