2011-05-18 40 views
16

El método Scala String (en la clase StringOps) stripMargin elimina líder espacios en blanco de cada línea de una multilínea String hasta e incluyendo la tubería (|) carácter (u otro delimitador señalado).Scala tira espacios en blanco

¿Existe un método equivalente para eliminar los espacios en blanco finales de cada línea?

Eché un vistazo rápido a los Scaladocs, pero no pude encontrar uno.

Respuesta

21

Puede utilizar simplemente una expresión regular para que:

input.replaceAll("""(?m)\s+$""", "") 

El prefijo (?m) en la expresión regular hace que sea una expresión regular de varias líneas. \s+ coincide con 1 o más caracteres de espacios en blanco y $ al final de la línea (debido a la bandera de líneas múltiples).

1

Quizás: s.lines.map(_.reverse.stripMargin.reverse).mkString("\n") o con System.getProperty("line.separator") en lugar de "\n"?!

2

esto podría no ser la manera más eficiente, pero también se puede hacer esto:

val trimmed = str.lines map { s => s.reverse.dropWhile (c => c == ' ').reverse.mkString(System.getProperty("line.seperator")) 
+0

nice 'lines', pero' _ == '' 'es posible –

+0

Sí, pensé en eso después de publicarlo. –

21

Java String método trim elimina los espacios en blanco del principio y el final:

scala> println("<"+" abc ".trim+">") 
<abc> 
+6

Pero eso solo eliminará los espacios en blanco de la primera línea y las líneas, respectivamente, de una cadena de varias líneas. – Ralph

+0

@Ralph Ah, de hecho. Lo siento. –

5

de Split 'n' guarnecido 'n' mkString (como un rock'n'roller):

val lines = """ 
This is 
a test 
    a foolish 
    test 
    a 
test 
t 
""" 

lines.split ("\n").map (_.trim).mkString ("\n") 

res22: String = 

This is 
a test 
a foolish 
test 
a 
test 
t 
+0

Nota: split ("\ n") usa la coincidencia de expresiones regulares. El uso de split ('\ n') parece transmitir mejor el significado deseado (no habrá diferencia de rendimiento en el mundo reciente, ya que split es una carcasa especial para patrones de un solo carácter de todos modos - ver [Java split String performances] (http: // stackoverflow .com/a/11002374/16673). – Suma

0
str.reverse.dropWhile(_ == ' ').reverse 
Cuestiones relacionadas