Comment puis-je ignorer les signes de ponctuation et les espaces en java?
import java.util.Scanner;
public class Ex3 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("Please input a word: ");
String Line = keyboard.nextLine();
boolean x = isReverse(Line);
System.out.print("It is " + x + " that this word is a palindrome.");
}
public static boolean isReverse(String Line) {
int length = Line.length();
boolean x = true;
String s = "";
for (int i = 0; i < length; i++) {
if (Line.charAt(i) != ' ') {
s += Line.charAt(i);
}
}
for (int i = 0; i < length; i++) {
if (Line.charAt(i) != Line.charAt(length - 1 -i)) {
x = false;
}
}
return x;
}
}
Ce que je suis en train de faire, c'est de faire un programme qui prend un mot ou une phrase en entrée et renvoie true ou false selon si c'est un palindrome ou non. Dans le programme que je suis censé ignorer les espaces et les signes de ponctuation et de faire des palindromes comme "Un homme, un plan, d'un canal, le Panama." Je pense avoir résolu l'espace problème, mais ne peut pas comprendre comment ignorer tous les signes de ponctuation.
Je suis à l'aide du scanner de classe, je me demande comment je pourrais modifier mon code pour que toute phrase d'entrée devient de ce fait.
OriginalL'auteur user1730357 | 2013-01-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une expression régulière pour supprimer tous les caractères de mot à partir de votre chaîne:
\\W
représente les caractères de motsorties:
Si vous voulez réduire la longueur de votre code, vous pouvez également utiliser
StringBuilder#inverse
à inverser la chaîne:MODIFIER
Si vous avez besoin de coller à la boucle, vous pouvez simplement vérifier dans votre boucle, si les caractères sont des lettres:
Remarque: vous avez un problème avec le cas (
A
!=a
) - une solution facile est d'abord de mettre tous les caractères en minuscules avecString lowerCase = Line.toLowerCase();
.x = isReverse(la Ligne.replaceAll("[\\W]", "")); au lieu de
boolean x = isReverse(Line);
.J'ai ajouté une plus courte et plus facile si cela vous aide.
J'ai ajouté que booléenne x, mais cela ne fonctionne toujours pas. Aussi ne sais pas trop ce que le s totalement fait que j'ai demandé à quelqu'un d'autre et ils ont dit d'utiliser l'autre pour la boucle.
Le
s
dans mon premier exemple est votreLine
.OriginalL'auteur assylias
La
StringUtils
classe dans Apache Commons Lang a quelques méthodes qui peuvent être utiles, y comprisdeleteWhitespace()
etdifference()
. En passant votre chaîne àdifference()
avec une chaîne de tous les caractères de ponctuation que vous souhaitez supprimer reviendrait un signe de ponctuation libre de chaîne.OriginalL'auteur melbyts