Je veux inverser chaque mot d'une chaîne en Java (pas la chaîne entière, juste chaque mot).
Exemple: si la chaîne d'entrée est "Hello World", la sortie doit être "olleH dlroW".
Je veux inverser chaque mot d'une chaîne en Java (pas la chaîne entière, juste chaque mot).
Exemple: si la chaîne d'entrée est "Hello World", la sortie doit être "olleH dlroW".
Ceci devrait faire l'affaire. Cela va itérer sur chaque mot dans la chaîne source, inverse à l'aide de StringBuilder
s'construit-en reverse()
méthode et à la sortie de l'inversion de parole.
String source = "Hello World";
for (String part : source.split(" ")) {
System.out.print(new StringBuilder(part).reverse().toString());
System.out.print(" ");
}
Sortie:
olleH dlroW
Notes: les Intervenants ont rappelé à juste quelques choses que j'ai cru devoir mentionner ici. Cet exemple permet d'ajouter un espace supplémentaire à la fin de la suite. Il suppose également vos mots sont séparés par un seul espace de chacun et votre phrase contient pas de ponctuation.
Voici la solution la plus simple qui n'utilise même pas de boucles.
public class olleHdlroW {
static String reverse(String in, String out) {
return (in.isEmpty()) ? out :
(in.charAt(0) == ' ')
? out + ' ' + reverse(in.substring(1), "")
: reverse(in.substring(1), in.charAt(0) + out);
}
public static void main(String args[]) {
System.out.println(reverse("Hello World", ""));
}
}
Même s'il s'agit d'un devoir, n'hésitez pas à le copier et à le soumettre comme vôtre. Vous aurez soit un crédit supplémentaire (si vous pouvez expliquer comment cela fonctionne), soit vous vous faites prendre pour plagiat (si vous ne le pouvez pas).
Personne ici ne considère les caractères unicode. Vous devez utiliser java.text.BreakIterator
pour rechercher les limites de mot, puis en utiliser une autre dans chaque limite de mot pour énumérer les limites de caractère:
String helloWorld = "He\u0308llo World"; // Hëllo World
StringBuilder reverseStringBuilder = new StringBuilder(helloWorld.length());
BreakIterator wordBreakIterator = BreakIterator.getWordInstance();
wordBreakIterator.setText(helloWorld);
int wordStart = wordIterator.first();
int wordEnd = wordIterator.next();
while (wordEnd != BreakIterator.DONE) {
String word = helloWorld.substring(wordStart,wordEnd);
if (Character.isLetterOrDigit(word.charAt(0))) {
// "Hello" or "World" in our example
BreakIterator characterBreakIterator = BreakIterator.getCharacterInstance();
characterBreakIterator.setText(word);
int characterEnd = characterBreakIterator.last();
int characterStart = characterBreakIterator.previous();
while (characterStart != BreakIterator.DONE) {
reverseStringBuilder.append(word.substring(characterStart, characterEnd));
characterEnd = characterStart;
characterStart = characterBreakIterator.previous();
}
} else {
// " " in our example
reverseStringBuilder.append(word);
}
wordStart = wordEnd;
wordEnd = wordIterator.next();
}
String dlroWolleh = reverseStringBuilder.toString(); // "dlroW ollëH"
L'utilisation des méthodes naïves ci-dessus déplace le caractère diacritique \u0308
au-dessus du premier l
lorsque vous inversez les String
. Vous voulez qu'il reste au-dessus des e
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.