Toolz.dev で文字列の逆ツールを出荷しました。これは、1 か月間で最も退屈なものだと思っていました。 split('').reverse().join('').何がうまくいかない可能性が. その後、私はサンプルテキストI& #39; d書き込みを貼り付けました - それは、私はかわいい感じだったので、" で終了しましたユニコード: 你好錫 (You kohzu) 錫&引用; - そして、出力が戻って来た2 つの絵文字が文字化けしたボックスに変わりました。 🌍🚀 になった \ude80🜍\ud83c。 漢字が完全に逆転しました。 絵文字が粉々に砕けた。
その5 分間の驚きは、実際には、私は文字列を反転について教えることができる最も有用なものです, だから、この全体のガイドは、それを中心に構築されています. reversingテキストは、些細な音, そして、プレーンASCIIのためにそれは、絵文字を導入する瞬間, フラグ, または特定のアクセント文字, " reverse the string" stops having one obvious answer - and most tools, including this one, quietly pick the answer that breaks them.
ザ・ 文字列の逆 ツールは 1 つのことを行います。入力すると、文字が即座に逆になります。 設定するモードもサインアップもありません。テキストがブラウザーから離れることはありません。 それが何をするか、どこで壊れるか、テキストを逆にする方法を正確に示しましょう 正しくは 実際のコードでは、破損が許容されない場合。
tl;dr: にテキストを貼り付ける 文字列の逆 そしてそれは文字順序をライブで反転します -
HelloなるolleH。 単一の文字逆転モード (個別のワードまたはライン モードはありません) で、入力すると自動更新され、結果をコピーまたはダウンロードできます。 回文チェック、簡単なパズル、インタビューの回答の検証に最適です。 注意: 単純な JavaScript のようにsplit('')、コード単位で分割されるため、絵文字とフラグを破ります。 テキストで表示され、CJK は逆に問題ありません。 それとペアリング ケースコンバーター や ワードカウンター 簡単なテキスト作業用。
文字列の逆ツールは実際に何をしますか?
1 つの操作: 文字の順序を逆にします。 最後の文字が最初の文字になります。
入力: Hello World
出力: dlroW olleH
ボンネットの下でロジックは本当に1 行です - 同じ行 you' d JavaScriptのインタビューで書きます:
text.split('').reverse().join('')
メニューに「逆語」または「逆行」モードはありません。 このページの以前のドラフトでは、文字、単語、文、および行モードについて説明しました。これは、現実的ではなく、野心的なものでした。 このツールは、文字を逆にして、完全に停止します。 入力すると自動的に更新されるため、逆の結果が表示され、入力と出力の両方の文字と行の数が表示されます。 テキストを貼り付け、テキスト ファイルをアップロードし、URL から読み込み、結果をコピーするか、またはそれをダウンロードできます。 .txt。
語順の逆転が特に必要な場合 (Hello World → World Hello)、コードでそれを行うでしょう split(' ').reverse().join(' ')- I'以下のスニペットを示します。
絵文字が逆になってしまうと、なぜ壊れるの?
これは、バグのクラス全体を説明するため、理解する価値のある部分です。
JavaScript 文字列は UTF-16 のシーケンスです コード単位、 " characters" ではなく、人間の意味では、ほとんどの日常文字 - 英語の文字、数字、句読点、さらには中国語、日本語、韓国語の文字 - は、単一の16 ビットコードユニットに収まるように split('') それらの間のカットをきれいにして、逆にすると機能します。
'你好世界'.split('').reverse().join('') // → '界世好你' ✅
でも、絵文字、フラグ シーケンス、いくつかのシンボルが生きています 外 その範囲であり、次のように保存されます 代理ペア- 一緒に何かを意味するだけの 2 つのコード ユニット。 split('') 幸いなことに、それらを半分にカットし、逆にすると半分をナンセンスにシャッフルします。
'AB🌍🚀'.split('').reverse().join('') // → mojibake, the emoji shatter ❌
マークを組み合わせることがもう 1 つの罠です。 アクセント付きの文字は 2 つの方法で保存できます。é)、またはベースレターと別の組み合わせアクセント (e + ◌́)。 事前構成されたバージョンは、うまく逆になります。 分解されたバージョンはアクセントを切り離し、浮き上がって、逆転後に間違った文字に着地します。
したがって、このツールの正直なルールは次のとおりです。 テキストで表示、数字、句読点、CJK が正しく反転します。絵文字、フラグの絵文字、および分解されたアクセントが壊れます。 That's not a defect unique to Toolz.dev - it's what split('') どこでもそうで、多くの「逆文字列」サイトが同じように動作します。 素早く、透明で、「逆」と言うときにほとんどの人が意味するものと一致するため、私は故意にそのままのバージョンをそのままにしましたが、あなたはエッジを知るに値します。
コードで文字列を正しく逆にするにはどうすればよいですか?
実際のコードと Unicode の重要性について書いている場合は、これがナイーブから修正へのはしごです。
レベル1 - ナイーブ(ツールの動作): 絵文字を壊します。
str.split('').reverse().join('')
レベル2 - スプレッド演算子: コードで反復処理する ポイント、つまり、ほとんどの絵文字をそのまま維持します (代理ペアは一緒にいてください)。 フラグのような複数の絵文字シーケンスを組み合わせて分解したいまだに壊れています。
[...str].reverse().join('')
レベル3 - 書記素認識: 各「ユーザーが認識した文字」をアトミックとして扱います。 これは本当に正しいアプローチです。
const seg = new Intl.Segmenter('en', { granularity: 'grapheme' });
[...seg.segment(str)].map(s => s.segment).reverse().join('');
Intl.Segmenter 絵文字、フラグ、スキントーンの修飾子、および結合マークを適切に処理します。 ユーザー テキストを絵文字で逆にすることが真の要件である場合、これは私が本番環境に出荷するバージョンです。
インタビューの練習とリファレンスのために、言語間で同じ操作があります。
# 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
パターンに注意してください。ほぼすべての言語の「明らか」な逆は、コード単位またはバイト ベースで、同じ Unicode の弱点を共有しています。 黒図形認識オプションに到達することは例外であり、デフォルトではありません。
文字列の逆転は実際に何に適していますか?
正規のインタビューのウォームアップであるだけでなく、いくつかの場所でそのキープを獲得します。
回文チェック。 文字列を逆にして、元のものと比較します - それらが一致する場合は、it& #39; s 回文を試してください racecar、 level、または 12321 ツールで出力が同じように戻ってくるのを観察します。 「人はパナマ運河の計画」のような回文回文の場合は、最初にスペースとケースを剥がします。
自分のコードを確認しています。 リートコード スタイルの逆転の問題を処理する場合は、予想される出力をツールに貼り付けて、すぐにサニティ チェックします。 これは、文字逆転の場合には高速なオラクルです。
簡単なパズルと遊び心のあるテキスト。 後方へのメッセージ、単語ゲーム、ミラーのようなソーシャル投稿 - 低い賭け金、そして逆転はそれ自身の逆なので、2 回逆転すると元の背中が得られます。そのプロパティはテストに便利です: 逆、逆、もう一度確認します'家に帰ります。
一つのこと でないよ 次の目的で使用します。 reversal はパーティーのトリックであり、暗号化ではありません。 it's は簡単に元に戻します。初心者 "obfuscation" チュートリアルに表示されますが、反転したテキストを保護されたものとして扱うことはありません。
| 逆タイプ | 例 | ツールで? | コード スニペット |
|---|---|---|---|
| 文字 | abc → cba |
はい (唯一のモード) | [...s].reverse().join('') |
| 言葉 | a b c → c b a |
いいえ - コードでやれ | s.split(' ').reverse().join(' ') |
| 行 | ライン順番が反転 | いいえ - コードでやれ | s.split('\n').reverse().join('\n') |
| 書記安全 | 絵文字はそのままにしておく | いいえ - Intl.Segmenterが必要です | 上記のレベル 3 を参照してください |
面接の準備をしている場合の 2 ポインター アプローチ
インタビュアーがこの質問を気に入るのは、エレガントな回答では組み込みの逆をまったく使用しないためです。 2 つの指針を互いに近づけて、交換します。
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
O (n) 時間で実行され、可変配列上の所定の位置で実行されると、O (1) 余分なスペース。 JavaScript では文字列は不変であるため、' 文字通りその場で交換できますが、2 ポインタ ロジックはそれら' 再確認で理解できるものです。 再帰版 - reverse(s) = last char + reverse(rest)- はよりきれいですが、O (n) コールスタック スペースを使用します。これは、インタビューで大声で言及する価値のあるトレードオフです。
そして、テストを簡単にするプロパティを覚えておいてください。逆転はそれ自体が逆です。 文字列を 2 回逆にすると、最初の場所に戻ります。 反転コードを単体テストすると、そのアサーションが一番です。 reverse(reverse(x)) === x 特に絵文字を含む入力のバッチの場合、テストは実際にサロゲート ペアのバグを隠すのではなくキャッチします。
よくある質問
文字列の逆ツールは、Word または Line Reversal をサポートしていますか?
いやー 。 文字を逆にする単一モードがあります。 別の語順または行順モードはありません。 単語または行の順序を逆にする必要がある場合は、コードでそれを実行してください split(' ') や split('\n') 続いて .reverse().join(...)。
絵文字が逆転した後に文字化けして出てくるのはなぜですか?
ツールは JavaScript のように UTF-16 コード単位で逆になるため split('')。 絵文字とフラグのシーケンスは、サロゲートペア - 2 つのコードユニットが一緒にしか意味をなさない - として格納され、反転すると分割される。 plain text と CJK 文字は単一のコードユニットであるため、正しく反転する。
Unicode と CJK テキストを処理しますか?
部分的に。 中国語、日本語、韓国語、キリル文字、および事前構成されたアクセント付き文字は、それぞれが 1 つのコード単位であるため、正しく逆になります。 絵文字、旗絵文字、分解された結合マークが壊れます。 独自のコードで完全に正しく処理するには、 Intl.Segmenter 黒素素の粒度で。
私のテキストはサーバーに送信されますか?
いいえ 入力するとブラウザーでローカルに反転が発生します。テキストは決してアップロードされません。これにより、機密文字列やプライベート文字列を反転しても安全になります。
単語が回文かどうかを確認するにはどうすればよいですか?
で逆にする 文字列の逆 ツールを作成し、元のものと比較します。 they're identical, it's a palindrome.フレーズについては、比較する前にスペース、句読点、大文字と小文字の違いを削除します - "A man a plan a canal Panama"正規化してから初めて回文になります。
非常に長いテキストを処理できますか?
はい。 ブラウザで動作するため、実際の制限はデバイスのメモリであり、何百万もの文字を快適にカバーします。 入力すると Live が逆になるため、極端に大きなペーストはすぐに感じられなくなりますが、サーバーの往復はありません。
文字列の逆転が面接の質問によくある理由は何ですか?
多くの基本事項を 1 つの小さな問題に詰め込んでいます。配列と文字列の操作、2 ポインターのテクニック、インプレースとコピーのトレードオフ、再帰、そして - インタビュアーが鋭い場合 - Unicode のエッジ ケースです。 It' s は開始が簡単で、簡単な答えと徹底的な答えを区別するのに十分な深さがあります。
関連ツール:



