39 votes

Inverser chaque mot de la chaîne "Hello World" avec Java

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".

109voto

William Brendel Points 15453

Ceci devrait faire l'affaire. Cela va itérer sur chaque mot dans la chaîne source, inverse à l'aide de StringBuilders'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.

48voto

JRL Points 36674

Connaissez vos bibliothèques ;-)

 import org.apache.commons.lang.StringUtils;

String reverseWords(String sentence) {
    return StringUtils.reverseDelimited(StringUtils.reverse(sentence), ' ');
}
 

23voto

fastcodejava Points 22174

Vous devez le faire sur chaque mot après split dans un array de mots.

 public reverse(String word) {
    char[] chs = word.toCharArray();

    int i=0, j=chs.length-1;
    while (i < j) {
        // swap chs[i] and chs[j]
        char t = chs[i];
        chs[i] = chs[j];
        chs[j] = t;
       i++; j--;
    }
}
 

17voto

polygenelubricants Points 136838

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).

8voto

Heath Borders Points 8067

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.com

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.

Powered by:

X