2013-08-03 2 views
2

문제는 사소한 것입니다. 일부 언어로 된 문자열을 사용하여 발음 기호를 제거하십시오. 예를 들어 "텔레폰"을 가져다 대면 결과 "전화"가 생성됩니다.Scala에서 발음 구별 기호 제거

자바에서

나는 그런 방법을 사용할 수 있습니다

public static String removeAccents(String str){ 
    return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 

을하고 잘 작동하지만 다음과 같이 스칼라에 ... 나는 코드를 시도하지 않습니다

val str = Normalizer.normalize("téléphone",Normalizer.Form.NFD) 
val exp = "\\p{InCombiningDiacriticalMarks}+".r 
exp.replaceAllIn(str,"") 

은 '수행 일하지 마!

저는 스칼라에서 Regex를 사용하면서 뭔가를 놓치고 있다고 생각합니다. 그래서 어떤 도움을 주시면 감사하겠습니다.

+1

둘 다 나를 위해 잘 작동하는 것 같습니다. 그냥 코드에서 추측하면 어쩌면 당신은'replaceAllIn'이'str'을 제자리에서 수정할 것이라고 기대하고있을 것입니다. Java/Scala의 문자열은 변경되지 않기 때문에 이런 일은 일어나지 않을 것입니다. – ghik

+0

@ghik 아니오, 기대하지는 않지만 스칼라로 얻은 결과는 다음과 같습니다. – arussinov

+0

발음 기호가없는 새 문자열을 반환하지만 똑같은 문자열을 반환합니다. "téléphone"을 사용하면 "téléphone "... @ 호크 어떻게 작동합니까? – arussinov

답변

0

나는이 문제를 노멀 라이저를 사용하여 발견했습니다. Apache Commons StringUtils에서 stripAccents의 형태로 솔루션을 찾았습니다.이 솔루션은 String에서 diacitics를 제거합니다.

val str = stripAccents("téléphone") 
println(str) 

"전화"가 표시됩니다. 희망이 사람을 돕는다!

관련 문제