문자열 추가, 삭제가 잦으니까 StringBuffer을 사용해보자
공백 문자를 기준으로 문자열을 분리한다
문자열의 첫번째 글자를 가져온다
2-1. 첫번째 글자가 알파벳이 맞는지, 아닌지 체크한다
2-2. 알파벳이 맞을 경우 대문자로 변경 / 아닐 경우 아무것도 변경하지 않는다
나머지 문자열을 가져온뒤, 모두 소문자로 변경한다
첫번째 문자열 + 나머지 문자열 + 공백으로 문자열을 완성한다
3-1. 이때 다음 문자열이 없을 때는 공백을 추가하지 않는다.
string.split("구분열")
: 구분열을 기준으로 문자열을 분리하여 string 배열에 삽입
str.substring(시작,끝)
: 시작 번째 인덱스부터 끝 번째 인덱스까지의 string을 리턴
str.toUpperCase
: String 문자열을 전부 대문자로 변경
class Solution {
public StringBuilder solution(String s) {
String[] Arraystr = s.split(" "); // 문자열 분리
StringBuilder answer = new StringBuilder();
for (int i =0; i<Arraystr.length ; i++){ // 문자열의 길이만큼 루프
String a = Arraystr[i];
answer.append(upperFirstChar(a)); // 함수 적용 후 정답에 부착
if(i != Arraystr.length -1){ // 마지막 문자열이 아니라면 공백 삽입
answer.append(" ");
}
}
return answer;
}
public String upperFirstChar(String a){ // 분리된 문자열의 첫 글자를 대문자로 변경하는 함수
String firstA = a.substring(0,1);
String secondA = a.substring(1, a.length());
String finalA;
if(isAlpha(firstA)){ // 첫번째 문자열이 알파벡이라면
finalA = firstA.toUpperCase() + secondA.toLowerCase(); // 대문자로 변경하여 부착
} else{
finalA = firstA + secondA.toLowerCase(); // 아닐 경우 그냥 부착
}
return finalA;
}
public boolean isAlpha(String s){ // 문자열이 알파벳으로만 이루어져있는지 확인
return s != null && s.chars().allMatch(Character::isLetter);
}
}
중간의 공백이 여러개가 있을 때에도 모두 구분자로 취급하여 삭제한다
"A B C"
return값 = {"A","B","C"}
스터디원들의 경우, flag를 설정하여 다음에 올 문자열이 공백 뒤에 온 것인지 확인 후 대문자로 변경하는 로직을 사용했다.
처음에 모든 문자열을 소문자로 변경해둔 뒤, 공백 뒤의 첫 글자만 대문자로 바꾸는 것이 쓸모없는 로직을 줄일 수 있다는 것을 알았다!
문자열 하나하나를 읽어와 비교하는 방식으로 사용한 함수이다.
StringBuilder에는 char 타입을 붙일 수 없다.
char 같은 기본 타입에는 toString(), equals() 등의 함수를 사용할 수 없다.
character 객체의 함수를 사용해야 char > String 변환이 가능하다.
toUpperCase
/ toLowerCase
는 알파벳이 아닐 경우 그냥 원래의 입력값을 리턴한다.
class Solution {
public StringBuilder solution(String s) {
StringBuilder answer = new StringBuilder();
boolean flag = true; // 공백 이후의 첫번째 문자열인지 확인하는 함수
for (int i = 0 ; i < s.length(); i++){
if(flag){ // 앞의 문자열이 공백이었으면
answer.append(Character.toUpperCase(s.charAt(i))); // 대문자로
}else{ // 아니면
answer.append(Character.toLowerCase(s.charAt(i))); // 소문자로
}
if(s.charAt(i) == ' '){
flag = true;
}else{
flag = false;
} // 현재 문자열 공백인지 아닌지에 따라 다음의 플래그 세팅
}
return answer;
}
}
class Solution {
public String solution(String s) {
String answer = "";
String[] sp = s.toLowerCase().split("");
boolean flag = true;
for(String ss : sp) {
answer += flag ? ss.toUpperCase() : ss;
flag = ss.equals(" ") ? true : false;
}
return answer;
}
}
Matcher 클래스를 사용하신 분도 봤다.
스터디원의 설명 참고하여 추후 학습하자!