指定した文字位置にテキストを挿入
「Hello world」の位置6に「beautiful 」を挿入すると、21文字の「Hello beautiful world」になります。元の文字は上書きされず、位置0は先頭を表し、絵文字は1つの位置として数えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- Hello world
- 挿入するテキスト
- beautiful
- 位置
- 6
- 結果
- Hello beautiful world
- 元の長さ
- 11
- 挿入後の長さ
- 10
- 結果の長さ
- 21
「指定位置へのテキスト挿入」は、既存の文章内で指定された場所に文字列を正確に追加します。元のテキスト、追加する内容、0から始まる文字位置を入力すると、元の文字をすべて保持したまま、そのインデックスの左右の文字の間へ新しい内容を配置します。テンプレートの組み立て、ラベルや区切りの追加、生成済みコンテンツの修正、反復可能な処理での精密な編集に適しています。Unicode文字を一貫した方法で数えるため、絵文字や基本ラテン文字以外の文字が予期せず2つの位置として扱われることはありません。
正確な挿入位置を選択します
位置は0から数えます。 位置0は最初の文字より前、位置1は最初の文字の後かつ2番目の文字の前に挿入します。元のテキストの文字数と同じ位置を指定すると、選択した文字列を末尾に追加します。たとえば、Hello worldでは空白が位置5、文字wが位置6です。
位置6にbeautiful を挿入すると、Hello beautiful worldになります。既存の内容は上書きされません。指定した境界で元の文章を分け、その間に挿入内容を置いて再結合します。
この定義により、スクリプトや画面上の編集でも予測可能な結果になります。指定可能な範囲は、0から元の文字数までの両端を含みます。負の位置や末尾を超える値は黙って補正せず、エラーとして拒否します。
そのため、意図しない場所への編集を防げます。応答には適用した位置と、元の長さ、挿入した長さ、結果の長さが含まれ、自動処理でも変更内容を確認できます。
Unicodeテキストを安全に扱います
この機能は、JavaScriptのUTF-16コード単位ではなくUnicodeコードポイントを数えます。この違いは、絵文字、歴史的文字体系、一般的でない記号を含む文章で重要です。絵文字は内部で2つのUTF-16単位を使用する場合がありますが、ここでは1つの位置として扱います。
そのため、挿入によってサロゲートペアが分断され、壊れたテキストが生じることはありません。返される各種の長さにも同じ数え方を使用します。結合文字や複雑な絵文字列は、フォント上で1つに見えても複数のコードポイントを含むことがあります。
これはUnicode自体の性質です。別のシステムから位置を受け取る場合は、そのシステムもコードポイントを数えているかご確認ください。バイトオフセット、UTF-16インデックス、書記素クラスタのインデックスは別の座標です。
数え方を明確にすると、ブラウザー、データベース、バックエンド間でテンプレートを渡す際のずれを防ぎ、どの環境でも同じ変換結果を得られます。
精密なテンプレートと編集処理を構築します
正確な挿入は、ほかの処理と組み合わせることで特に有用になります。文書処理では、固定の挨拶の後へアカウント名を入れたり、ファイル拡張子の前へ追跡用識別子を加えたり、先行する解析で見つけた境界へ生成済みの条項を配置したりできます。既存の文章を保持するため、置換とは異なります。
検索する語句も削除する範囲もありません。処理側ですでに目的の文字境界が分かっている場合に適しています。前段の内容が変化する可能性がある場合は境界をご確認ください。
それより前で文字が増減すると、正しい位置も移動します。再利用するテンプレートでは、固定オフセットより安定したマーカーのほうが保守しやすい場合があります。まずマーカーを探し、そのインデックスを渡します。
空の挿入文字列は意図的な無変更処理として受け付けるため、条件分岐を簡潔にできます。ネットワーク、乱数、現在時刻を使わない決定的な関数であり、同じ入力は常に同じ結果を返します。
活用例
テキストテンプレートを完成させる
周囲のテンプレートを正確に保持しながら、既知の文字境界へ顧客名、参照番号、生成した語句を挿入します。
ファイル名へ接尾辞を追加する
別の処理で拡張子の位置を特定した後、その直前へバージョンや言語の識別子を配置します。
内容を精密に編集する
既存の文章を検索して置換せず、生成済みコンテンツへ句読点、注釈、区切り、欠けた語句を追加します。
よくある質問
位置は0と1のどちらから始まりますか?
0から始まります。 位置0は最初の文字より前に挿入し、元の文字数と同じ位置は末尾へ追加します。
挿入すると既存のテキストが置換されますか?
いいえ。 元の文字はすべて保持され、指定した境界へ選択した文字列だけを追加します。
絵文字はどのように数えますか?
位置と長さにはUnicodeコードポイントを使用します。補助文字の絵文字は2つのUTF-16単位ではなく1ポイントです。複雑な記号は複数ポイントを含む場合があります。
先頭や末尾にも挿入できますか?
はい。 先頭へ追加する場合は位置0、末尾へ追加する場合は元の文字数をご指定ください。
位置がテキストの末尾を超えているとどうなりますか?
黙って位置をずらすのではなく、挿入を受け付けません。そのため、間違った場所に変更が入ることはありません。使える位置は0からテキストの長さまでで、長さと同じ値なら末尾に追加します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/insert-at-position \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello world","insert_text":"beautiful ","position":6}'const res = await fetch("https://api.kit.forhosting.com/str/insert-at-position", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello world",
"insert_text": "beautiful ",
"position": 6
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/insert-at-position",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello world",
"insert_text": "beautiful ",
"position": 6
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/insert-at-position", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello world","insert_text":"beautiful ","position":6}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello world","insert_text":"beautiful ","position":6}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/insert-at-position", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "Hello world",
"insert_text": "beautiful ",
"position": 6
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.insert_at_position",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
精密なテンプレートと編集処理を構築します
API自動化は1リクエスト$0.002です。
技術的な質問
位置が無効な場合はどうなりますか?
負数、小数、範囲外の位置は、値を変更または制限せずinvalid_inputエラーを返します。