各行の前後空白を削除
各行の両端を一度に整えます。余分な空白やタブが付いた3行なら、不要な10文字が消えてhello、world、foo barになり、foo barの間のスペースは残ります。空行もそのままの位置に残ります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- hello world foo bar
- 入力
- hello world foo bar
- テキスト
- hello world foo bar
- 行数
- 3
- 行
- hello, world, foo bar
行を意識した空白トリマーは、乱れた複数行の貼り付けを、各行内の語を崩さずにきれいな端へ変えます。空でない任意の文字列—ログ、コード断片、TSVダンプ、文書からコピーした文章—を入力すると、ツールは改行を正規化し、改行で分割し、各行に完全なトリムをかけて先頭スペース、末尾タブ、混在インデントのノイズを消し、行内の間隔はそのまま残します。エディタ、QAスクリプト、宿題チェッカー、ETL前処理は、フルIDEの検索置換を開かずに同じ行単位ルールを必要とします。
行単位トリムの意味と String.trim との違い
多くの言語は文字列全体の先頭と末尾の空白だけを除く単一の trim を提供します。それではインデントされた中間行は触れられず、ログ行のブロック、末尾スペース付きのコード、セルにパディングがある複数行スプレッドシート出力を貼るときにまさに問題になります。本ツールは各行を独立にトリムします。
Windows の CRLF とレガシー CR を単一の LF 形に正規化したあと、テキストを LF で分割し、各セグメントを Unicode 対応の完全な空白トリムに通し、セグメントを再び LF で結合します。語の間の内部スペースはそのまま、各行の端だけがきれいになります。
内容の間の空行はトリム後に空文字列になり、空白区切りの構造は消えるのではなく空行として見えます。元の貼り付けの先頭・末尾の空行も分割後に空行として残り、アルゴリズムは行を落とさずトリムするだけだからです。入力全体が空または空白のみはハードエラーです。
設計は選択範囲に対する「末尾空白のトリム」のような日常的エディタ操作に合わせつつ、インデント付きリストやチャットUIからコピーしたときに出がちな先頭パディングも消します。
実用的なコツ、制限、関連検索
検索意図が行の空白トリム、複数行の先頭末尾スペース除去、インデント付き貼り付けのオンライン整理であるときにこの機能を使います。テストの往復確認は容易です。コードレイアウト用の先頭スペースが必要なときだけ意図的インデントに注意してください—本ツールはそれを除きます。
インデントを保ちつつ末尾だけ掃除したい場合は別ポリシーか前処理が必要です。HTML ソースと Markdown も送った文字列の各生行をトリムします。マークアップではなく描画テキストが重要なときは先にタグを除いてください。
このページは文書全体の String.trim だけでも、空行削除でも、二重スペースを一つに潰すでも、区切りを意識した CSV セル掃除でも、AI 書き換えでもありません。学生やレビュアーには同じサンプルの前後を示し、変わるのは行端だけで語内の間隔はそのままだと見せてください。
活用例
チケット用のログ・コンソール貼り付けを整理
開発者が先頭スペースや末尾タブ付きの複数行ログを貼ると、ツールはバグトラッカーや diff 向けに揃った行を返します。
宿題・作文の行ダンプを正規化
教員と LMS スクリプトが、語数や盗用パイプラインの前に提出各行の端パディングを取り除きます。
テキスト前処理のユニットテスト
エディタ、ETL 段、markdown パイプライン向けに既知のパディング付き複数行フィクスチャと空入力拒否を生成します。
よくある質問
語と語の間のスペースも消えますか?
いいえ。 各行の先頭と末尾の空白だけが除かれます。行内のスペースとタブは保持されます。
空入力ではどうなりますか?
空白以外の文字を少なくとも一つ含む非空文字列を指定してください。
空行は削除されますか?
いいえ。 空行はトリム後も空行のままです。行の削除や結合はせず、各行の端だけをトリムします。
Windows の改行はどう扱われますか?
CRLF と単独の CR は分割前に LF へ正規化され、同じ貼り付けがどの環境でも同じ結果になります。
コードの字下げは残りますか?
残りません。行頭のスペースも削除するため、字下げはすべてなくなります。字下げを保ったまま行末の空白だけを消したい場合は、このツールは向いていません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/trim-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":" hello \n\tworld\t\n foo bar "}'const res = await fetch("https://api.kit.forhosting.com/str/trim-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": " hello \n\tworld\t\n foo bar "
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/trim-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": " hello \n\tworld\t\n foo bar "
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/trim-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":" hello \\n\\tworld\\t\\n foo bar "}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":" hello \n\tworld\t\n foo bar "}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/trim-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": " hello \n\tworld\t\n foo bar "
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.trim_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
空または空白のみの入力は明確な invalid_input エラーで拒否され、自動化が空白の貼り付けを成功した整理と誤認しません。経路は純粋な決定的文字列論理—ネットワークなし、乱数シードなし、壁時計依存なし—なので、無料のブラウザ実行と前払いAPIは呼び出すたびに同じ JSON を返します。
行単位トリムの意味と String.trim との違い
意味のある整理済み文書はなく、呼び出し側はゼロ行の成功ではなく invalid_input として扱うべきです。
API の呼び出し方とレスポンスの内容
真の行単位意味が欲しいときは改行を先に潰さず生の複数行本体を送ってください。すべてを一行に潰すと単一セグメントの外側端だけがトリムされます。必須の string フィールド text(別名 input、value、string、s、content、body)を持つ JSON 本体を送ってください。値は全体の空白トリム後に空でない文字列でなければならず、巨大な貼り付けで Worker やブラウザのメモリを使い果たさないよう十万文字を超えてはいけません。成功時、レスポンスは送った元の文字列を input、LF で結合した行単位トリム結果を text、分割後の行数(空行含む)を line_count、トリム済み行文字列の順序付き配列を lines、元と整理後の長さを chars_before と chars_after、トリムが除いた文字数を chars_removed、行数と除去文字数を報告する短い英語要約を message として返します。検証失敗—text 欠落、非 string 値、過大ペイロード、全体トリム後の空内容—は invalid_input を返し課金されません。料金は成功リクエストごとに定額 $0.002、単位 item、限界単価ゼロです。統合時は整理内容を text または lines で検証し、回帰には chars_removed を任意で比較し、空フォーム送信の invalid_input は請求イベントではなくクライアント不具合として扱ってください。
実用的なコツ、制限、関連検索
パディング付き二行を与え、語が左に揃い末尾スペースがないことを期待し、タブインデントの三行目でタブが消え句内の二重スペースが残ることを確認し、空文字や空白のみを意図的に送って invalid_input と非空文字列を求めるメッセージを確認します。エンコーディング修正付きの表形式 CSV なら data.clean_csv、空行による段落合計なら str.paragraph_count、人が既に行を分けていて各行の端だけきれいにしたいなら本機能を選んでください。invalid_input を返す失敗タスクは前払い残高を消費せず、フォーム検証と CI の否定テストを安く保ちます。
技術的な質問
行空白トリマーは無料ですか?
ブラウザツールは無料でローカル実行です。API 呼び出しは成功リクエストごとに $0.002 の前払い KIT 残高を使い、失敗タスクは課金されません。