Kotlin
주어진 7단계에 맞게 문자열을 조작한다.
1단계 : kotlin의 toLowerCase()를 활용해서 소문자로 변환.
2단계 : 정규화 혹은 조건문을 활용.
3단계 : 역시 정규화 혹은 조건문을 활용.
4단계 : 문자열의 처음과 끝을 확인하고 '.'인 경우에 제거.
5단계 : 문자열.length == 0 인 경우 문자열에 a를 대입.
6단계 : 문자열.length >= 16 인 경우 문자열.slice(0..15)로 문자열 변환. 마지막에 '.' 있는 경우 제거.
7단계 : 문자열.length <= 2 인 경우 문자열에 plus.
class Solution {
fun solution(new_id: String): String {
var answer = new_id
val reg1 = Regex("[a-z0-9-_.]")
val reg2 = Regex("[.]{2,}")
// 1단계
answer = answer.toLowerCase()
var temp = StringBuilder()
// 2단계
for (e in answer) {
if (reg1.containsMatchIn(e.toString())) {
temp.append(e)
}
}
// 3단계
answer = temp.toString().replace(reg2, ".")
// 4단계
if (answer.isNotEmpty() && answer.first() == '.') answer = answer.removeRange(0, 1)
if (answer.isNotEmpty() && answer.last() == '.') answer = answer.removeRange(answer.length-1, answer.length)
// 5단계
if (answer.isEmpty()) answer = "a"
// 6단계
if (answer.length >= 16) {
answer = answer.slice(0..14)
}
// 6단계 : 4단계 과정을 한번 더 해주는 이유는 위 과정을 거치고 마지막 문자가 .인 경우 제거해주기 위함.
if (answer.isNotEmpty() && answer.first() == '.') answer = answer.removeRange(0, 1)
if (answer.isNotEmpty() && answer.last() == '.') answer = answer.removeRange(answer.length-1, answer.length)
// 7단계
while (answer.length <= 2) {
answer += answer[answer.length - 1]
}
return answer
}
}
정규화를 쓰기 위해선 regex 객체를 사용해야한다. 사용법은 작성한 정규식으로 regex 객체를 생성하고 regex.containsMatchIn(문자)
로 필터링한다. regex에 대해선 좀 더 공부해야겠다.
조건문을 작성할 때 answer.first() == "."
이렇게 작성하니까 자꾸 오류가 뜨는 것이었다. 오류 내용은 자료형 불일치였다. char랑 string 뭐시기... answer.first() == '.'
로 수정하고 해결. 파이썬에서는 그냥 상관없이 사용했는데 주의해야겠다.
문자열을 더 할 때 아무 생각없이 append를 사용했다가 오류 발생. 위 방법 역시 answer가 StringBuilder
가 아니라서 객체가 계속 생성되지만 일단은 저렇게 해결.