2016-11-17 1 views
1

저는 스칼라에서 문자열의 접미사 (부분 문자열) 집합을 제거하는 관용적 인 방법을 찾고 있습니다.스칼라 : 문자열에서 접미사 (부분 문자열) 집합을 제거하는 관용적 인 방법

val inputString = "[email protected]" 
val suffixes = List("\"", "@xyz.com") 

기본적으로 접미사 목록은 외부 적으로로드되므로 정적이 아닙니다. 그러므로 나는 stripSuffix 방법을 체인의 접근 방식을 사용할 수 없습니다

(PS - I는 "inputString.stripPrefix를 사용하여 ("시작 \ "")

답변

4

당신은 .stripSuffix() 기능과 함께에에 foldLeft을 사용 수를 제거 할 수 있습니다 . 접미사의 동적 목록을 반복하고 문자열 하나씩에서 그들을 제거

val inputString = "[email protected]" 
val suffixes = List("\"", "@xyz.com") 
val strippedString = suffixes.foldLeft(inputString) { (string, suffix) => 
    string.stripSuffix(suffix) 
} 

출력 : abc

이 방법으로 당신의 접미사의 순서 나는 것 출력을 mpact하십시오. 그것은 하나의 큰 정규식에 전체 목록을 컴파일 이후 접미사 목록이 긴 경우 이것은 매우 비효율적 일 수 있지만 접미사 목록 순서

import scala.util.matching.Regex 
val pattern = s"(${suffixes.map(s => Regex.quote(s)).mkString("|")})+$$" 
inputString.replaceAll(pattern, "") 

에 의존하지 않는

1

해결책.

관련 문제