![](/img/trans.png)
[英]Not able to figure out the solution for Java program to check whether string is palindrome
[英]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));
你终于有了分号。 所以我认为如果条件没有用
由于这是一项高中作业,因此我只给出一些建议,您可以自己解决。
考虑一下要包含/排除的内容,然后编写代码。 请记住,只要您不想处理复杂的字符编码,就可以使用<
或>
运算符比较char变量。
字符串实际上只是一个字符序列,您可以逐个比较,重新排序,包含或排除字符。
方法只能做一件事,而不是很多事。 看看您的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.