Recortar espacios de cada línea
Limpie los bordes de cada línea de una vez: tres líneas con relleno, una con tabuladores, pierden 10 caracteres sobrantes y quedan en hello, world y foo bar, con el espacio interior de foo bar intacto. Las líneas en blanco siguen en su sitio. 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 foo bar
- Entrada
- hello world foo bar
- Texto
- hello world foo bar
- N.º de líneas
- 3
- Líneas
- hello, world, foo bar
Un recortador de espacios consciente de las líneas convierte un pegado multilínea desordenado en bordes limpios sin colapsar las palabras dentro de cada línea. Introduzca cualquier cadena no vacía—registros, fragmentos de código, volcados TSV o prosa copiada de un documento—y la herramienta normaliza los finales de línea, divide por saltos de línea y aplica un recorte completo a cada línea para que desaparezcan los espacios iniciales, las tabulaciones finales y el ruido de sangría mixta, mientras el espaciado interior se mantiene intacto. Editores, scripts de control de calidad, revisores de tareas y preprocesadores ETL necesitan esa misma regla por línea sin abrir un buscador y reemplazo de un IDE completo.
Qué significa el recorte por línea y por qué difiere de String.trim
La mayoría de los lenguajes ofrecen un único recorte que solo elimina espacios del inicio y el final de toda la cadena. Eso deja intactas las líneas intermedias sangradas, que es exactamente el problema cuando pega un bloque de líneas de registro, una muestra de código con espacios finales accidentales o una exportación de hoja de cálculo multi-fila donde cada fila tiene celdas rellenadas.
Esta herramienta recorta cada línea de forma independiente: tras normalizar los saltos de Windows CRLF y el CR legado a una forma LF única, el texto se divide por LF, cada segmento pasa por un recorte de espacios con soporte Unicode completo y los segmentos se vuelven a unir con LF. Los espacios interiores entre palabras permanecen; solo se limpian los bordes de cada línea.
Las líneas en blanco entre contenido se convierten en cadenas vacías tras el recorte, de modo que la estructura que usaba separadores en blanco sigue visible como líneas en blanco en lugar de desaparecer. Las líneas en blanco al inicio y al final del pegado original siguen presentes como líneas vacías tras la división, porque el algoritmo no elimina líneas—solo las recorta.
El diseño coincide con comandos cotidianos del editor como «recortar espacios finales» aplicados a una selección, y además limpia el relleno inicial que suele aparecer al copiar de listas sangradas o interfaces de chat.
Consejos prácticos, límites y búsquedas relacionadas
Use esta capacidad cuando la intención de búsqueda sea recortar espacios de líneas, quitar márgenes iniciales y finales multilínea o limpiar un pegado sangrado en línea. Tenga en cuenta la sangría intencional solo si necesita espacios iniciales para el diseño del código—esta herramienta los elimina; si solo desea limpieza final conservando la sangría, necesita otra política o un prepaso. El origen HTML y Markdown siguen recortando cada línea en bruto de la cadena que envía; quite las etiquetas primero si le importa el texto renderizado y no el marcado.
Esta página no es solo un String.trim de documento completo, no es un eliminador de líneas en blanco, no es un colapsador de espacios que convierte dobles espacios en uno, no es un limpiador de celdas CSV con conciencia de delimitador y no es un reescritor con IA. Al enseñar a estudiantes o incorporar revisores, muestre la misma muestra antes y después para que vean que solo cambian los bordes de línea y que el espaciado interno de las palabras se deja intacto.
Qué puede hacer con ella
Limpiar pegados de registro y consola para tickets
Los desarrolladores pegan registros multilínea con espacios iniciales accidentales y tabulaciones finales; la herramienta devuelve líneas al ras listas para trackers de errores y diffs.
Normalizar volcados de tareas y ensayos
Profesores y scripts LMS quitan el relleno de bordes de cada línea enviada antes de que los pipelines de conteo de palabras o plagio vean el texto.
Preguntas frecuentes
¿Elimina los espacios entre palabras?
No. Solo se elimina el espacio al inicio y al final de cada línea. Los espacios y tabulaciones interiores de una línea se conservan.
¿Qué ocurre con la entrada vacía?
Proporcione una cadena no vacía con al menos un carácter que no sea espacio.
¿Se eliminan las líneas en blanco?
No. Las líneas en blanco permanecen como líneas vacías tras el recorte. La herramienta no elimina ni fusiona líneas; solo recorta los bordes de cada una.
¿Cómo se tratan los finales de línea de Windows?
CRLF y el CR suelto se normalizan a LF antes de dividir para que el mismo pegado produzca el mismo resultado en cada plataforma.
¿Es gratuito el recortador de espacios por línea?
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-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)Ejemplo de solicitud
{
"text": " hello \n\tworld\t\n foo bar "
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.trim_lines",
"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 entrada vacía o solo de espacios se rechaza con un error invalid_input claro para que la automatización nunca trate un pegado en blanco como una limpieza exitosa. La ruta es lógica de cadenas pura y determinista—sin red, sin semillas aleatorias, sin dependencia del reloj—de modo que el ejecutor gratuito del navegador y la API prepaga devuelven el mismo JSON cada vez que la invoca.
Qué significa el recorte por línea y por qué difiere de String.trim
La entrada completa vacía o solo de espacios es un error duro: no hay un documento limpio significativo que devolver, y los clientes deben tratarlo como invalid_input y no como un éxito de cero líneas.
Cómo llamar a la API y qué contiene la respuesta
Prefiera enviar el cuerpo multilínea en bruto en lugar de colapsar de antemano los saltos de línea si desea semántica real por línea; colapsar todo a una línea solo recortaría los bordes exteriores de un único segmento. Envíe un cuerpo JSON con un campo string obligatorio text (alias input, value, string, s, content y body). El valor debe ser una cadena no vacía tras recortar los espacios generales y no debe superar cien mil caracteres para que una sola petición no agote la memoria del Worker o del navegador con pegados enormes. En caso de éxito la respuesta devuelve input como la cadena original enviada, text como el resultado totalmente recortado por línea unido con LF, line_count como el número de líneas tras la división (incluidas las vacías), lines como un array ordenado de las cadenas de línea recortadas, chars_before y chars_after como las longitudes de las cadenas original y limpia, chars_removed como cuántos caracteres eliminó el recorte en total, y message como un resumen breve en inglés que informa del recuento de líneas y de caracteres eliminados. La validación fallida—text ausente, un valor que no es string, una carga sobredimensionada o contenido vacío tras el recorte general—devuelve invalid_input y nunca se cobra. El precio es un $0.002 fijo por petición exitosa con unidad item y precio unitario marginal cero. Al integrar, aserte sobre text o lines para el contenido limpio, compare opcionalmente chars_removed en comprobaciones de regresión y trate invalid_input como un error del cliente en envíos de formulario en blanco y 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 fáciles: envíe dos líneas rellenadas y espere esas palabras al ras a la izquierda sin espacios finales; envíe una tercera línea con tabulación y confirme que el tab desaparece mientras los dobles espacios interiores de una frase permanecen; envíe deliberadamente cadena vacía o solo espacios para confirmar invalid_input y el mensaje que pide una cadena no vacía. Prefiera data.clean_csv cuando la carga sea CSV tabular con correcciones de codificación; prefiera str.paragraph_count cuando necesite totales de párrafos por líneas en blanco; prefiera esta capacidad cuando los humanos ya separaron líneas y solo necesita bordes limpios en cada una. 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
Pruebas unitarias de preprocesadores de texto
Genere fixtures multilínea rellenados de referencia y rechazos de entrada vacía para editores, etapas ETL y pipelines de markdown.