Eliminar caracteres del final de una cadena Scala

82

¿Cuál es el método más simple para eliminar el último carácter del final de una cadena en Scala?

Encuentro que la clase Rubys String tiene algunos métodos muy útiles como chop . Habría usado "oddoneoutz" .headOption en Scala, pero está depreciado. No quiero meterme en lo demasiado complejo:

string.slice(0, string.length - 1)

Por favor, alguien me diga que hay un método simple y agradable como cortar para algo tan común.

Teorema apropiado
fuente

Respuestas:

153

¿Qué tal usar dropRight, que funciona en 2.8: -

"abc!".dropRight(1)

Que produce "abc"

Don Mackenzie
fuente
1
Lo más conciso que se me ocurre para 2.7 es "abc!". Split (". $) (0)
Don Mackenzie
3
Vaya, quiero decir "abc!". Split (". $") (0)
Don Mackenzie
Excelente Gracias Don, tendré que actualizar a 2.8 :)
BefittingTheorem
13
string.init // padding for the minimum 15 characters
Walter Chang
fuente
Gracias Walter, ese es exactamente el método que pensé que tendría Scala. Una vez más, todos estos buenos métodos son solo 2.8, así que actualice aquí vengo :)
BefittingTheorem
7
val str = "Hello world!"
str take (str.length - 1) mkString
David Winslow
fuente
+1, gracias @Daniel Spiewak; me llevó a "str drop (str.length -4)", obtiene las últimas 4 tarjetas de crédito, justo lo que necesitaba ;-)
virtualeyes
5

Si desea la solución más eficiente que solo usar:

str.substring(0, str.length - 1)
Andriy Plokhotnyuk
fuente
4
string.reverse.substring(1).reverse

Eso es básicamente chuleta, ¿verdad? Si anhela un método de corte, ¿por qué no escribir su propia StringUtilsbiblioteca e incluirla en sus proyectos hasta que encuentre un reemplazo adecuado y más genérico?

Oye, mira, es algo común.

Apache CommonsStringUtils .

Stefan Kendall
fuente
3
Seguro que es Stefan. Esperaba un método que cuando mires el código, entiendas lo que está pasando :) Lo que estoy diciendo es: Para algo tan simple como "eliminar el último carácter de la cadena" reverse.substring (1) .reverse es engañoso. Gracias por la respuesta
BefittingTheorem
Además, necesitaría envolver la cadena en un StringBuilder para obtener un método inverso.
Fabian Steeg
2
La primera parte fue principalmente una broma: P. Cualquier programador de Java que mire su Scala debe estar familiarizado con StringUtils, o al menos conocer la biblioteca Apache Commons para ver la importación y no sentirse ofendido. Commons es útil y debe usarse siempre que sea posible. Descubrí que la mayoría de los proyectos incluyen bienes comunes en algún momento, por lo que generalmente no hay ningún gasto para usar la biblioteca. Incluso podría alias StringUtils como su en sus programas scala y referirse a él como su.chop (str), que es bastante conciso y no tan desagradable como usar una subcadena.
Stefan Kendall
Lástima que un implícito para StringUtils sería mucho trabajo. Solo muestra la falta de coincidencia entre la forma en que los usuarios de Scala y los usuarios de Java piensan sobre los métodos de extensión.
Ken Bloom
import org.apache.commons.blah. {StringUtils => su} ¿es mucho trabajo? Idealmente, estaría implementando en un entorno con estas bibliotecas ya establecidas, como dije.
Stefan Kendall