Supprimer les lignes vides en haut et en bas
Collez un bloc avec deux lignes vides au-dessus et deux en dessous : ces quatre lignes disparaissent et les trois lignes du centre restent intactes, écarts et retraits compris. Aux bords, une ligne faite seulement d'espaces ou de tabulations compte comme vide. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- Hello world Keep this spacing
- Entrée
- Hello world Keep this spacing
- Texte
- Hello world Keep this spacing
- Nombre de lignes
- 3
- Lignes
- Hello world , , Keep this spacing
Les extraits collés et les documents exportés arrivent souvent avec un halo de lignes vides en haut et en bas que personne n’a demandé. Cet outil retire uniquement ces lignes vides des bords et rien d’autre : les paragraphes intérieurs, l’espace supplémentaire laissé entre les sections et le remplissage d’une ligne de contenu restent exactement tels quels. Envoyez n’importe quelle chaîne—un brouillon de courrier, un fichier Markdown, une vidange de journal ou une dissertation—et le moteur normalise les fins de ligne Windows et de l’ancien Mac, avance depuis les deux extrémités jusqu’à une ligne encore visible, puis renvoie le bloc restant. Les lignes uniquement composées d’espaces comptent comme vides, si bien qu’une rangée d’espaces ou une tabulation isolée en tête d’un collage est écartée comme une ligne vraiment vide.
Ce que signifie retirer les lignes vides aux extrémités et pourquoi ce n’est pas String.trim
La plupart des éditeurs exposent un trim de chaîne entière qui ne pèle les espaces qu’au premier et au dernier caractère d’un tampon. C’est le mauvais outil lorsque le désordre qui compte, ce sont des lignes vides empilées au-dessus d’un titre ou après une signature, tandis que le corps a encore besoin de ses interlignes de paragraphe et de ses citations indentées.
Cette capacité parcourt la liste des lignes, pas celle des caractères : après normalisation des fins Windows CRLF et du CR hérité vers LF, le texte est découpé sur LF ; la marche part de l’indice zéro et avance tant que chaque ligne est vide ou ne contient que des espaces Unicode, et une marche jumelle part du dernier indice et recule.
La première et la dernière ligne qui portent encore des caractères visibles deviennent les nouveaux bords ; tout ce qui se trouve entre elles est copié inchangé, y compris les séparateurs blancs que l’on voulait garder et les espaces qui vivent dans une phrase. Une ligne faite seulement d’espaces ou de tabulations est traitée comme vide aux bords, car c’est ainsi que paraissent d’ordinaire les journaux de discussion collés et les documents Word exportés.
Une ligne qui a encore une lettre, un chiffre ou une ponctuation est du contenu même avec une indentation de tête, si bien que les extraits de code et les listes imbriquées gardent leur remplissage de première colonne. L’algorithme ne fusionne jamais deux lignes vides intérieures en une, ne joint jamais les paragraphes et ne rogne jamais la gauche ni la droite d’une ligne de contenu.
Ce contrat est ce que l’on cherche en tapant supprimer lignes vides haut et bas, plutôt que de rogner chaque ligne ou d’effondrer tous les espaces.
Conseils pratiques, limites et recherches associées
Utilisez cette capacité lorsque l’intention de recherche est de retirer les lignes vides en tête et en pied, d’enlever les rangées vides de début et de fin, ou de ranger un extrait collé sans toucher l’espacement intérieur. Gardez les outils frères à l’esprit. Le trim d’espaces par ligne est un autre métier : cette page retire les espaces de chaque ligne et ne supprime pas les rangées vides.
Effondrer tout l’espace et retirer tous les espaces sont aussi d’autres métiers : ils détruisent le rythme intérieur d’un document. Retirer tous les sauts joint le fichier en une seule ligne. Compter les paragraphes ou les lignes rapporte la structure sans la changer.
Préférez cette page lorsque le document est déjà mis en forme et qu’il ne reste qu’à ôter le halo vide avant d’enregistrer, d’envoyer ou d’imprimer. HTML et Markdown sont traités comme du texte brut : les balises ne sont pas retirées, et une ligne de seul balisage compte encore comme contenu si elle a des caractères visibles.
En enseignant ou en formant des relecteurs, montrez le même échantillon avant et après pour que l’on voie que seules les lignes vides des bords changent et que l’espacement interne des mots plus les rangées vides intérieures restent intacts.
Cas d’usage
Ranger courriers et exports de discussion collés
Ôtez le halo vide au-dessus de la formule d’appel et sous la signature, en gardant la ligne vide qui sépare les paragraphes.
Normaliser devoirs et vidanges Markdown
Enseignants et chaînes de sites statiques retirent les rangées vides de tête et de queue des fichiers soumis avant d’enregistrer ou de rendre le corps.
Questions fréquentes
Cela supprime-t-il les lignes vides au milieu du texte ?
Non. Seules les lignes vides du tout début et de la toute fin sont retirées. Les rangées vides intérieures restent où elles sont.
Les espaces entre les mots ou en tête d’une ligne de contenu sont-ils retirés ?
Non. Les lignes de contenu sont copiées inchangées. L’indentation de tête, les espaces de fin d’une ligne non vide et les doubles espaces dans une phrase sont conservés.
Qu’est-ce qui compte comme ligne vide ?
Une ligne sans caractères, ou une ligne qui ne contient que des espaces tels que espaces ou tabulations. Une ligne avec un caractère visible est du contenu.
Que se passe-t-il si le champ text est omis ?
Une chaîne vide est acceptée et renvoie un document nettoyé vide.
Retirer les lignes vides aux bords est-il gratuit ?
L’outil du navigateur est gratuit et s’exécute en local.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/str/trim-blank-edges \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"\n\n Hello world \n\nKeep this spacing\n\n"}'const res = await fetch("https://api.kit.forhosting.com/str/trim-blank-edges", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "\n\n Hello world \n\nKeep this spacing\n\n"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/trim-blank-edges",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "\n\n Hello world \n\nKeep this spacing\n\n"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/trim-blank-edges", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"\\n\\n Hello world \\n\\nKeep this spacing\\n\\n"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"\n\n Hello world \n\nKeep this spacing\n\n"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/trim-blank-edges", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "\n\n Hello world \n\nKeep this spacing\n\n"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.trim_blank_edges",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_chars | 100000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Le chemin est une analyse déterministe, sans réseau, sans horloge et sans hasard, de sorte que l’exécuteur gratuit du navigateur et l’API renvoient le même JSON à chaque appel.
Comment appeler l’API et ce que contient la réponse
Une chaîne vide est valide : il n’y a pas de lignes de contenu, donc le résultat est un champ text vide, zéro ligne restante et un message qui indique combien de blancs de bord ont été retirés de ce tampon vide. Préférez envoyer le corps multiligne brut plutôt que de le rogner vous-même si vous voulez que les comptes et changed reflètent le collage d’origine. Envoyez un corps JSON avec le champ string obligatoire text. Les alias input, value, string, s, content et body sont acceptés afin que d’anciens clients n’aient pas à renommer la charge. La valeur doit être une chaîne et ne pas dépasser cent mille caractères, un plafond dur qui empêche un seul collage d’épuiser la mémoire du Worker ou du navigateur. Si text manque, si la valeur est null, si le type n’est pas string ou si la charge est trop grande, la réponse est invalid_input et rien n’est facturé. En cas de succès la réponse renvoie input comme la chaîne d’origine envoyée, text comme le résultat rogné aux bords joint avec LF, line_count comme le nombre de lignes restantes y compris les vides intérieures, lines comme ce tableau ordonné, leading_blank_lines et trailing_blank_lines comme les comptes pelés à chaque extrémité, blank_lines_removed comme leur somme, chars_before et chars_after comme les longueurs des chaînes d’origine et nettoyée, changed comme true lorsqu’au moins une ligne vide de bord a été retirée, et message comme un court résumé en anglais. Le tarif est un $0.002 forfaitaire par requête réussie avec unité item. À l’intégration, assertez sur text ou lines pour le document nettoyé, comparez leading_blank_lines et trailing_blank_lines en régression, et traitez invalid_input comme un bug client pour un champ manquant plutôt qu’un événement de facturation.
Conseils pratiques, limites et recherches associées
Les contrôles aller-retour pour les tests sont simples : fournissez deux lignes vides, un titre, un blanc intérieur, une ligne de corps et deux vides de plus, et attendez le titre et le corps avec le blanc intérieur encore entre eux ; fournissez une première ligne uniquement d’espaces et une dernière uniquement de tabulation autour d’un paragraphe et confirmez que ces bords disparaissent tandis que l’indentation du paragraphe reste ; omettez text à dessein pour confirmer que invalid_input nomme le champ. Les tâches échouées qui renvoient invalid_input ne consomment pas le solde prépayé, ce qui maintient bon marché la validation des formulaires et les tests négatifs de CI.
Cas d'intégration
Préparer des fixtures de journal et d’extraits
Les scripts d’assurance qualité collent la sortie console avec des rangées vides en trop aux deux bouts et ont besoin d’une fixture stable qui préserve encore l’espacement intérieur.