Quitar lineas en blanco al inicio y al final
Pegue un bloque con dos líneas vacías arriba y dos abajo: esas cuatro desaparecen y las tres líneas del centro quedan intactas, con sus huecos y sangrías. En los bordes, una línea con solo espacios o tabuladores cuenta como vacía. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- Hello world Keep this spacing
- Entrada
- Hello world Keep this spacing
- Texto
- Hello world Keep this spacing
- Número de líneas
- 3
- Líneas
- Hello world , , Keep this spacing
Los fragmentos pegados y los documentos exportados suelen llegar con un halo de líneas vacías arriba y abajo que nadie pidió. Esta herramienta elimina solo esas líneas en blanco de los bordes y nada más: los párrafos interiores, el espacio extra dejado entre secciones y el relleno de una línea con contenido permanecen exactamente igual. Envíe cualquier cadena—un borrador de correo, un archivo Markdown, un volcado de registro o un ensayo—y el motor normaliza los finales de línea de Windows y del Mac antiguo, avanza desde ambos extremos hasta hallar una línea con texto visible y devuelve el bloque restante. Las líneas que solo tienen espacios cuentan como en blanco, de modo que una fila de espacios o un tabulador suelto al inicio de un pegado se descarta igual que una línea realmente vacía.
Qué significa recortar líneas en blanco en los bordes y por qué no es String.trim
La mayoría de los editores ofrecen un recorte de cadena completa que solo pela espacios del primer y el último carácter de un búfer. Esa es la herramienta equivocada cuando el desorden que importa son líneas vacías apiladas encima de un título o después de una firma, mientras el cuerpo aún necesita sus huecos de párrafo y sus citas sangradas.
Esta capacidad recorre la lista de líneas, no la lista de caracteres: tras normalizar los finales Windows CRLF y el CR legado a LF, el texto se divide por LF; el recorrido parte del índice cero y avanza mientras cada línea esté vacía o contenga solo espacios Unicode, y un recorrido gemelo parte del último índice y retrocede.
La primera y la última línea que aún tienen caracteres visibles se convierten en los nuevos bordes; todo lo que queda entre ellas se copia sin cambios, incluidos los separadores en blanco que se deseaba conservar y los espacios que viven dentro de una frase. Una línea que solo tiene espacios o tabuladores se trata como en blanco en los bordes, porque así suelen verse los registros de chat pegados y los documentos exportados de Word.
Una línea que aún tiene una letra, un dígito o un signo de puntuación es contenido aunque también lleve sangría inicial, de modo que las muestras de código y las listas anidadas conservan su relleno de primera columna. El algoritmo nunca fusiona dos líneas interiores en blanco en una, nunca une párrafos y nunca recorta la izquierda ni la derecha de una línea con contenido. Ese contrato es lo que se busca al consultar recortar líneas en blanco arriba y abajo, no recortar cada línea ni colapsar todo el espacio.
Consejos prácticos, límites y búsquedas relacionadas
Use esta capacidad cuando la intención de búsqueda sea recortar líneas en blanco del inicio y del final, quitar filas vacías de cabecera y pie, o ordenar un fragmento pegado sin tocar el espaciado interior. Tenga presentes las herramientas hermanas. El recorte de espacios por línea es otro trabajo: esa página quita espacios de cada línea y no elimina filas vacías.
Colapsar todo el espacio y quitar todos los espacios también son otros trabajos: destruyen el ritmo interior de un documento. Quitar todos los saltos une el archivo en una sola línea. Contar párrafos o líneas informa de la estructura sin cambiarla.
Prefiera esta página cuando el documento ya está maquetado y solo hace falta quitar el halo vacío antes de guardar, enviar o imprimir. HTML y Markdown se tratan como texto en bruto: no se quitan etiquetas, y una línea solo de marcado sigue contando como contenido si tiene caracteres visibles.
Al enseñar o al incorporar revisores, muestre la misma muestra antes y después para que se vea que solo cambian las líneas en blanco de los bordes y que el espaciado interno de las palabras más las filas vacías interiores se dejan intactos.
Qué puede hacer con ella
Ordenar correos y exportaciones de chat pegados
Quite el halo vacío encima del saludo y debajo de la firma, conservando la línea en blanco que separa los párrafos.
Normalizar deberes y volcados Markdown
Docentes y tuberías de sitios estáticos eliminan las filas vacías iniciales y finales de los archivos enviados antes de guardar o renderizar el cuerpo.
Preguntas frecuentes
¿Borra las líneas en blanco del medio del texto?
No. Solo se quitan las líneas en blanco del principio mismo y del final mismo. Las filas vacías interiores se quedan donde están.
¿Se quitan los espacios entre palabras o al inicio de una línea con contenido?
No. Las líneas con contenido se copian sin cambios. La sangría inicial, los espacios finales de una línea no vacía y los dobles espacios dentro de una frase se conservan.
¿Qué cuenta como línea en blanco?
Una línea sin caracteres, o una que solo contiene espacios como espacios o tabuladores. Una línea con cualquier carácter visible es contenido.
¿Qué ocurre si se omite el campo text?
Una cadena vacía se acepta y devuelve un documento limpio vacío.
¿Es gratis recortar las líneas en blanco de los bordes?
La herramienta del navegador es gratuita y se ejecuta en local.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"text": "\n\n Hello world \n\nKeep this spacing\n\n"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.trim_blank_edges",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
La ruta es un análisis determinista, sin red, sin reloj y sin azar, de modo que el ejecutor gratuito del navegador y la API devuelven el mismo JSON cada vez.
Cómo llamar a la API y qué contiene la respuesta
Una cadena vacía es válida: no hay líneas de contenido, así que el resultado es un campo text vacío, cero líneas restantes y un message que indica cuántos blancos de borde se quitaron de ese búfer vacío. Prefiera enviar el cuerpo multilínea en bruto en lugar de recortarlo de antemano si desea que los recuentos y changed reflejen el pegado original. Envíe un cuerpo JSON con el campo string obligatorio text. Se aceptan los alias input, value, string, s, content y body para que clientes antiguos no tengan que renombrar la carga. El valor debe ser una cadena y no superar cien mil caracteres, un tope duro que impide que un solo pegado agote la memoria del Worker o del navegador. Si falta text, si llega null, si el tipo no es string o si la carga es demasiado grande, se responde invalid_input y no se cobra. En caso de éxito la respuesta devuelve input como la cadena original enviada, text como el resultado recortado en los bordes unido con LF, line_count como el número de líneas restantes incluidas las interiores en blanco, lines como ese array ordenado, leading_blank_lines y trailing_blank_lines como los recuentos pelados de cada extremo, blank_lines_removed como su suma, chars_before y chars_after como las longitudes de la cadena original y de la limpia, changed como true cuando se eliminó al menos una línea en blanco de borde, y message como un resumen breve en inglés. El precio es un $0.002 fijo por petición exitosa con unidad item. Al integrar, compruebe text o lines para el documento limpio, compare leading_blank_lines y trailing_blank_lines en regresiones y trate invalid_input como un error del cliente por un campo ausente, no como un evento de facturación.
Consejos prácticos, límites y búsquedas relacionadas
Las comprobaciones de ida y vuelta para pruebas son sencillas: envíe dos líneas vacías, un título, un blanco interior, una línea de cuerpo y dos vacías más, y espere el título y el cuerpo con el blanco interior aún entre ellos; envíe una primera línea solo de espacios y una última solo de tabulador alrededor de un párrafo y confirme que esos bordes desaparecen mientras la sangría del párrafo permanece; omita text a propósito para confirmar que invalid_input nombra el campo. Las tareas fallidas que devuelven invalid_input no consumen saldo prepagado, lo que mantiene barata la validación de formularios y las pruebas negativas de CI.
Casos de integración
Preparar fixtures de registro y fragmentos
Los scripts de control de calidad pegan la salida de consola con filas vacías extra en ambos extremos y necesitan un fixture estable que aún preserve el espaciado interior.