J'ai expédié l'outil de retour de chaîne sur Toolz.dev en pensant que c'était la chose la plus ennuyeuse que je construisais tout le mois. split('').reverse().join(''). Ce qui pourrait mal tourner. Ensuite, j'ai collé l'exemple de texte que j'ai écrit - qui, parce que je me sentais mignon, s'est terminé par "Unicode : 你好世界 🌍🚀" - et la sortie est revenue avec les deux emoji transformés en boîtes brouillées. 🌍🚀 devenu \ude80🜍\ud83c. Les caractères chinois s'inversaient parfaitement. Les emoji se sont brisés.
Cette surprise de cinq minutes est en fait la chose la plus utile que je puisse vous apprendre sur la réversion des cordes, donc tout ce guide est construit autour de lui. Le texte inversé semble trivial, et pour l'ASCII simple. Au moment où vous introduisez des emoji, des drapeaux ou certains caractères accentués, "inverser la chaîne" cesse d'avoir une réponse évidente - et la plupart des outils, y compris celui-ci, choisissent tranquillement la réponse qui les casse.
le Chaîne inversée L'outil fait une chose : il inverse les caractères, instantanément, au fur et à mesure que vous tapez. Aucun mode de configuration, aucune inscription et votre texte ne quitte le navigateur. Laissez-moi vous montrer exactement ce qu'il fait, où il se casse et comment inverser le texte correctement En code réel lorsque la casse n'est pas acceptable.
tl;dr : Coller du texte dans Chaîne inversée Et il renvoie la commande de personnage en direct -
Hellose transformeolleH. Il s'agit d'un mode d'inversion de caractères unique (pas de modes de mots ou de lignes distincts), il se met à jour automatiquement au fur et à mesure que vous tapez, et vous pouvez copier ou télécharger le résultat. Il est parfait pour les vérifications du palindrome, les énigmes rapides et la vérification des réponses aux entretiens. Attention : comme un Javascript simplesplit(''), il casse les emoji et les drapeaux car il se divise par unité de code. Texte brut et amende CJK inversée. associez-le à la Convertisseur de boîtier ou compteur de mots Pour un travail de texte rapide.
Que fait réellement l'outil de revers de chaîne ?
Exactement une opération : il inverse l'ordre des caractères. Le dernier personnage devient le premier, et ainsi de suite.
Entrée : Hello World
Sortie : dlroW olleH
Sous le capot, la logique est véritablement une ligne - la même ligne que vous écrivez dans une interview JavaScript :
text.split('').reverse().join('')
Il n'y a pas de "mots inversés" ou "lignes inversées" cachées dans un menu. Les versions antérieures de cette page décrivaient les modes de caractère, de mot, de phrase et de ligne; c'était ambitieux, pas réel. L'outil inverse les caractères, point final. Il se met à jour automatiquement au fur et à mesure que vous tapez, de sorte que vous voyez le résultat inversé en direct, et cela vous donne le nombre de caractères et de lignes de l'entrée et de la sortie. Vous pouvez coller du texte, télécharger un fichier texte, charger à partir d'une URL, puis copier le résultat ou le télécharger en tant que .txt.
Si vous souhaitez spécifiquement une inversion de commande de mots (Hello World → World Hello), vous le feriez dans le code avec split(' ').reverse().join(' ') — Je vais montrer les extraits ci-dessous.
Pourquoi les emojis se brisent-ils lorsque vous les inversez ?
C'est la partie qui mérite d'être comprise, car elle explique toute une classe de bogues.
Les chaînes JavaScript sont des séquences de UTF-16 Codes unités, pas "caractères" au sens humain. La plupart des caractères de tous les jours - lettres anglaises, chiffres, ponctuation et même caractères chinois, japonais et coréens - rentrent dans une seule unité de code 16 bits. aussi split('') Les coupe proprement et les travaux inversés :
'你好世界'.split('').reverse().join('') // → '界世好你' ✅
Mais les emoji, les séquences de drapeaux et certains symboles vivent de dehors cette plage et sont stockés comme paires de substitution — Deux unités de code qui ne signifient que quelque chose ensemble. split('') les coupe joyeusement en deux et l'inversion mélange les moitiés en absurdité:
'AB🌍🚀'.split('').reverse().join('') // → mojibake, the emoji shatter ❌
Les marques de combinaison sont l'autre piège. Une lettre accentuée peut être stockée de deux manières : comme un point de code précomposé (é), ou comme lettre de base plus un accent de combinaison séparé (e + ◌́). La version précomposée s'inverse bien. La version décomposée détache l'accent, qui flotte et atterrit sur la mauvaise lettre après inversion.
Donc la règle honnête pour cet outil : Le texte brut, les chiffres, la ponctuation et le CJK s'inversent correctement ; les emoji, les emoji de drapeau et les accents décomposés se briseront. Ce n'est pas un défaut propre à Toolz.dev - c'est ce que split('') fait partout, et beaucoup de "chaînes inversées" se comportent de la même manière. J'ai laissé la version naïve en place délibérément parce qu'elle est rapide, transparente et correspond à ce que la plupart des gens veulent dire lorsqu'ils disent "inverser cela", mais vous méritez de connaître l'avantage.
Comment inverser une chaîne correctement dans le code ?
Si vous écrivez du code réel et que vous avez des questions Unicode, voici l'échelle de naïf à la correction.
Niveau 1 — Naive (ce que fait l'outil) : casse les emoji.
str.split('').reverse().join('')
Niveau 2 — Opérateur de spread : Itère par code point, il garde donc la plupart des emoji intacts (les paires de substitution restent ensemble). Casse toujours des marques décomposées et des séquences multi-emojis comme des drapeaux.
[...str].reverse().join('')
Niveau 3 — Consigne de graphème : Traitez chaque caractère "atomique" perçu par l'utilisateur. C'est l'approche vraiment correcte.
const seg = new Intl.Segmenter('en', { granularity: 'grapheme' });
[...seg.segment(str)].map(s => s.segment).reverse().join('');
Intl.Segmenter Gère les emoji, les drapeaux, les modificateurs de peau et la combinaison des marques correctement. C'est la version que j'expédierai en production si l'inversion du texte de l'utilisateur avec Emoji était une exigence réelle.
Voici la même opération dans toutes les langues, pour la pratique et la référence des entretiens :
# Python — [::-1] works by code point, similar to JS spread
reversed_str = original[::-1]
words_reversed = ' '.join(original.split()[::-1])
// Java — StringBuilder.reverse() is code-unit based (same emoji caveat)
String reversed = new StringBuilder(original).reverse().toString();
// Go — []rune iterates by code point, safer than byte reversal
runes := []rune(original)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
reversed := string(runes)
// PHP — strrev() is byte-based and mangles any multi-byte UTF-8
$reversed = strrev($original); // breaks UTF-8
Remarquez le modèle : presque tous les langages "inverses" sont "inverses" de code ou d'octet et partage la même faiblesse Unicode. L'option grapheme-aware est l'exception, pas la valeur par défaut.
À quoi sert l'inversion des chaînes ?
Au-delà de l'échauffement canonique de l'entretien, il gagne sa vie à quelques endroits.
Contrôles palindromes. Inversez la chaîne et comparez à l'original - s'ils correspondent, c'est un palindrome. éprouver racecar, level, ou 12321 Dans l'outil et regardez la sortie revenez identique. Pour les phrases palindromes comme "un homme, un plan d'un canal, un "c'est un espace" et un cas de déconner.
Vérification de votre propre code. Lorsque vous écrasez des problèmes d'inversion de style LeetCode, collez la sortie attendue dans l'outil pour la vérifier en une seconde. C'est un oracle rapide pour le cas d'inversion des personnages.
Puzzles rapides et texte ludique. Les messages en arrière, les jeux de mots, les publications sociales miroir - faibles enjeux et l'inversion sont son propre inverse, donc inverser deux fois vous donne le retour d'origine. Cette propriété est pratique pour les tests : inversez, inversez à nouveau, confirmez que vous êtes chez vous.
une chose à non Utilisez-le pour : Sécurité. L'inversion est un truc de fête, pas de cryptage - c'est trivialement annulé. Il apparaît dans les didacticiels "Obfuscation" débutants, mais ne traitez jamais le texte inversé comme protégé.
| Type d'inversion | exemple | dans l'outil ? | extrait de code |
|---|---|---|---|
| personnages | abc → cba |
Oui (le seul mode) | [...s].reverse().join('') |
| mots | a b c → c b a |
Non - faites-le dans le code | s.split(' ').reverse().join(' ') |
| trait | Commande de ligne inversée | Non - faites-le dans le code | s.split('\n').reverse().join('\n') |
| Graphème-sûr | Emojis Restez intact | Non — Nécessite un intl.segmenter | Voir le niveau 3 ci-dessus |
L'approche à deux points, si vous vous préparez pour des entretiens
La raison pour laquelle les intervieweurs adorent cette question est que la réponse élégante n'utilise pas du tout un revers intégré. Vous marchez deux pointeurs l'un vers l'autre et échangez :
Original: H E L L O
i j swap H and O
O E L L H
i j swap E and L
O L L E H
ij pointers meet — done
Il s'exécute en O(n) Time et, effectué sur place sur un tableau modifiable, O(1) espace supplémentaire. En JavaScript, les chaînes sont immuables, vous ne pouvez donc pas littéralement échanger en place, mais la logique à deux points est ce qu'ils vérifient que vous comprenez. La version récursive — reverse(s) = last char + reverse(rest) — est plus jolie mais utilise l'espace de pile d'appels O(N), qui est le compromis qui mérite d'être mentionné à haute voix lors de l'interview.
Et rappelez-vous la propriété qui rend les tests triviaux : l'inversion est son propre inverse. Inversez une chaîne deux fois et vous êtes de retour là où vous avez commencé. Lorsque je teste un code d'annulation, c'est le numéro un de l'assertion : reverse(reverse(x)) === x Pour un lot d'entrées, notamment - en particulier - les emoji, le test attrape en fait le bogue de la paire de substitution au lieu de le cacher.
Questions fréquentes
L'outil de retour de chaîne prend-il en charge l'inversion des mots ou des lignes ?
non . Il a un seul mode qui inverse les caractères. Il n'y a pas de mode de commande de mots ou de ligne de commande séparé. Si vous devez inverser l'ordre des mots ou des lignes, faites-le avec du code avec split(' ') ou split('\n') suivi de .reverse().join(...).
Pourquoi les emojis sortent-ils brouillés après une inversion ?
Parce que l'outil s'inverse par unité de code UTF-16, comme JavaScript split(''). Les séquences d'emoji et de drapeau sont stockées sous forme de paires de substitution - deux unités de code qui n'ont de sens que les uns des autres - et l'inversion les divise. Le texte brut et les caractères CJK sont des unités à code unique, ils s'inversent donc correctement.
Gère-t-il unicode et du texte CJK ?
en partie. Les caractères accentués chinois, japonais, coréens, cyrilliques et précomposés s'inversent correctement car chacun est une unité de code unique. Les emoji, les emoji de drapeau et les marques de combinaison décomposées se briseront. Pour une manipulation entièrement correcte dans votre propre code, utilisez Intl.Segmenter Avec une granularité de graphème.
Mon texte est-il envoyé sur un serveur ?
non . L'inversion se produit localement dans votre navigateur lorsque vous tapez : le texte n'est jamais téléchargé. Cela le rend sûr pour inverser les chaînes sensibles ou privées.
Comment vérifier si un mot est un palindrome ?
inversez-le avec le Chaîne inversée outil et comparez à l'original. S'ils sont identiques, c'est un palindrome. Pour les phrases, supprimez les espaces, la ponctuation et les différences de cas avant de comparer - "un homme un plan un canal Panama" est un palindrome uniquement après la normalisation.
Peut-il gérer un texte très long ?
Oui. Puisqu'il s'exécute dans votre navigateur, la limite pratique est la mémoire de votre appareil, qui couvre confortablement des millions de personnages. Il inverse en direct au fur et à mesure que vous tapez, donc les pâtes extrêmement volumineuses peuvent sembler légèrement moins instantanées, mais il n'y a pas de serveur aller-retour.
Pourquoi inverser une chaîne est-il une question d'entretien si courante ?
Il contient de nombreux fondamentaux dans un petit problème : la manipulation de tableau et de chaîne, la technique à deux points, les compromis sur place par rapport aux compromis, la récursivité et, si l'intervieweur est net, les cas de bord Unicode. Il est facile de démarrer et a suffisamment de profondeur pour séparer une réponse rapide d'une réponse approfondie.
Outils associés :

