Convert string to camel case, CodeWars Kata
Complete the method/function so that it converts dash/underscore delimited words into camel casing. The first word within the output should be capitalized only if the original word was capitalized (known as Upper Camel Case, also often referred to as Pascal case).
Examples
"the-stealth-warrior"` gets converted to `"theStealthWarrior"`
`"The_Stealth_Warrior"` gets converted to `"TheStealthWarrior"
-
또는 _
로 구분되어 있는 문자열을 카멜 케이스로 변환하는 문제입니다. 포인트는 첫 번째 단어는 변환하지 않는 것입니다. 입력값의 첫 글자가 소문자로 들어오면 출력값도 소문자여야 합니다.
My Solution
저는 먼저 입력 문자열을 정규식[-_]
을 이용해 split()
해서 배열로 만들었습니다. 그 다음 스트림의 map()을
이용해 변환했습니다. 변환은 substring()
을 이용해서 첫 문자만 대문자로 변환하고 이어 붙였습니다. 그런 다음 첫 글자의 대소문자 여부를 처리하기 위해 결괏값의 첫 글자를 입력값의 첫 글자와 바꿔 주었습니다.
package com.codewars;
import java.util.Arrays;
public class ConvertStringToCamelCase {
public static String toCamelCase(String s) {
if (s.isEmpty())
return "";
String camel = String.join("", Arrays.stream(s.split("[-_]"))
.map(item -> item.substring(0, 1).toUpperCase() + item.substring(1)).toArray(String[]::new));
return s.substring(0, 1) + camel.substring(1);
}
}
Best Practice
BP1
자바의 정규식 API를 적극 활용한 케이스입니다. Matcher
를 이용해서 구분자 다음 글자를 대문자로 변환했습니다. 이러면 첫 글자에 대한 처리도 별도로 필요 없죠. Matcher
와 StringBuffer
를 이용해 문자열을 변환하고 합치는 패턴은 기억해 둘 만한 것 같습니다.
package com.codewars;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConvertStringToCamelCase {
static String toCamelCase(String s) {
Matcher m = Pattern.compile("[_|-](\\w)").matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group(1).toUpperCase());
}
return m.appendTail(sb).toString();
}
}
BP2
두번째는 저의 솔루션과 비슷하지만 Stream
을 만들 때 배열을 모두 가져오는 것이 아니라 1번째부터 가져와 첫 번째 단어의 변환을 애초에 하지 않았습니다. 그리고 저는 String.join()을
이용했지만 여기에서는 reduce()
함수에 String.concat()
을 이용했습니다.
package com.codewars;
import java.util.Arrays;
public class ConvertStringToCamelCase {
static String toCamelCase(String str) {
String[] words = str.split("[-_]");
return Arrays.stream(words, 1, words.length).map(s -> s.substring(0, 1).toUpperCase() + s.substring(1))
.reduce(words[0], String::concat);
}
}
'IT Contents > 프로그래밍 팁' 카테고리의 다른 글
Tribonacci Sequence, CodeWars Kata 자바 솔루션 (0) | 2021.04.10 |
---|---|
Counting Duplicates, CodeWars Kata 자바 솔루션 (0) | 2021.04.08 |
Number of trailing zeros of N!, CodeWars Kata 자바 솔루션 (0) | 2021.04.06 |
Human Readable Time, CodeWars Kata 자바 솔루션 (0) | 2021.04.05 |
Create Phone Number, CodeWars Kata 자바 솔루션 (0) | 2021.04.04 |
최근댓글