문자열 스칼라 끝에서 문자 제거


82

Scala에서 문자열 끝에서 마지막 문자를 제거하는 가장 간단한 방법은 무엇입니까?

Rubys String 클래스에는 chop 과 같은 매우 유용한 메서드가 있습니다. Scala에서 "oddoneoutz".headOption을 사용했지만 감가 상각되었습니다. 나는 지나치게 복잡한 것에 들어가고 싶지 않습니다.

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

누군가가 이런 일반적인 것을 위해 잘게 자르는 것과 같은 멋진 간단한 방법이 있다고 말 해주세요.

답변:


153

2.8에서 작동하는 dropRight를 사용하는 것은 어떻습니까?

"abc!".dropRight(1)

"abc"를 생성합니다.


1
2.7에 대해 생각해 낼 수있는 가장 간결한 것은 "abc!"입니다 .split ( ". $) (0)
Don Mackenzie

3
죄송합니다. "abc!"를 의미합니다 .split ( ". $") (0)
Don Mackenzie

대단히 감사합니다 Don, 저는 2.8로 업그레이드해야합니다. :)
BefittingTheorem

13
string.init // padding for the minimum 15 characters

고마워요 Walter, 그것이 내가 Scala가 가질 것이라고 생각한 방법입니다. 다시 모든 좋은 방법은 : 2.8 만, 그래서 여기에 업그레이드 내가 올 수 있습니다
BefittingTheorem

7
val str = "Hello world!"
str take (str.length - 1) mkString

+1, 감사합니다 @Daniel Spiewak; 나를 "str drop (str.length -4)"로 안내하고, 신용 카드의 마지막 4 개를 얻습니다. 필요한 것입니다. ;-)
virtualeyes

5

사용하는 것보다 가장 효율적인 솔루션을 원한다면 :

str.substring(0, str.length - 1)

4
string.reverse.substring(1).reverse

그것은 기본적으로 찹입니다. 절단 방법을 갈망하고 있다면 자신 만의 StringUtils라이브러리를 작성 하고 적절하고 일반적인 대체 방법을 찾을 때까지 프로젝트에 포함하는 것이 어떻습니까?

이봐 요, 커먼즈에 있어요.

Apache CommonsStringUtils .


3
확실히 스테판입니다. 나는 당신이 코드를 볼 때 무슨 일이 일어나고 있는지 이해하는 방법을 기대하고 있었다 :) 내가 말하는 것은 : "문자열에서 마지막 문자 제거"와 같은 간단한 것에 대해 reverse.substring (1) .reverse는 오해의 소지가 있습니다. 답장을 보내 주셔서 감사합니다
BefittingTheorem

또한 리버스 메서드를 얻으려면 문자열을 StringBuilder로 래핑해야합니다.
Fabian Steeg

2
첫 번째 부분은 대부분 농담이었습니다. Scala를보고있는 모든 Java 프로그래머는 StringUtils에 익숙하거나 최소한 Apache Commons 라이브러리를 알고 있어야 가져 오기를보고 불쾌하지 않습니다. Commons는 유용하며 가능하면 사용해야합니다. 나는 대부분의 프로젝트가 어느 시점에서 커먼즈를 포함하고 있다는 것을 알았으므로 일반적으로 라이브러리 사용에 비용이 들지 않습니다. 스칼라 프로그램에서 StringUtils를 su로 별명을 지정하고 su.chop (str)로 참조 할 수도 있습니다. 이는 매우 간결하고 부분 문자열을 사용하는 것만 큼 짜증나 지 않습니다.
Stefan Kendall

StringUtils에 대한 암시 적이 너무 나쁘면 많은 작업이 필요합니다. Scala 사용자와 Java 사용자가 확장 메서드에 대해 생각하는 방식 사이의 불일치를 보여줍니다.
Ken Bloom

import org.apache.commons.blah. {StringUtils => su} 작업이 많습니까? 이상적으로는 내가 말했듯이 이러한 라이브러리가 이미 설정된 환경에 배포하는 것입니다.
Stefan Kendall
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.