문제
내가 작성한 정답
ArrayList
import java.util.*;
class Solution {
public String[] solution(String myString) {
String[] answer11 = myString.split("x");
ArrayList<String> answer = new ArrayList<>();
Arrays.sort(answer11);
for(String s : answer11){
if(!s.isEmpty()) answer.add(s);
}
return answer.toArray(String[]::new);
}
}
stream
import java.util.Arrays;
class Solution {
public String[] solution(String myString) {
return Arrays.stream(myString.split("x")) // String[]->Stream<String>
.filter(s->!s.isEmpty()) // Stream<String> : 문자열 요소들의 흐름일 뿐 배열같은 것이 아니다.
.sorted() // Stream<String>
.toArray(String[]::new); // .toArray -> 인자가 없는 toArray()는 Object[]를 반환
}
}
다른 사람들의 정답
import java.util.*;
class Solution {
public String[] solution(String myString) {
StringTokenizer st = new StringTokenizer(myString, "x");
int idx = 0, N = st.countTokens();
// idx는 결과 배열에 토큰을 저장할 인덱스를 나타내는 변수이며, 초기값은 0.
// N은 StringTokenizer 객체 st에 남아있는 토큰의 총 개수를 나타내는 변수.
// countTokens() 메소드는 남아있는 토큰의 수를 반환한다.
String[] result = new String[N]; // 토큰을 저장할 String 배열 result를 생성. 배열의 크기는 토큰의 총 개수 N으로 설정.
for (int n = 0;n < N;n++) // 각 반복에서 StringTokenizer에서 다음 토큰을 가져와 result 배열에 저장.
result[idx++] = st.nextToken();
// st.nextToken()은 StringTokenizer에서 다음 토큰을 반환.
// 반환된 토큰은 result[idx]에 저장되고, idx는 1 증가. (후위 증가 연산자 사용)
Arrays.sort(result);
return result;
}
}
StringTokenizer 클래스는 Java에서 문자열을 지정된 구분자를 기준으로 토큰(단어)으로 분리하는 데 사용되는 클래스다.
- StringTokenizer(String str): 주어진 문자열 str을 기본 구분자(공백)를 사용하여 토큰화하는 StringTokenizer 객체를 생성
- StringTokenizer(String str, String delim): 주어진 문자열 str을 지정된 구분자 delim을 사용하여 토큰화하는 StringTokenizer 객체를 생성
- StringTokenizer(String str, String delim, boolean returnDelims): 주어진 문자열 str을 지정된 구분자 delim을 사용하여 토큰화하는 StringTokenizer 객체를 생성. returnDelims가 true이면 구분자도 토큰으로 반환하고, false이면 구분자는 토큰으로 반환하지 않는다.
- hasMoreTokens(): 토큰화된 문자열에 아직 읽지 않은 토큰이 남아 있는지 여부를 반환.
- nextToken(): 토큰화된 문자열에서 다음 토큰을 반환. 더 이상 토큰이 없으면 NoSuchElementException이 발생한다.
- countTokens(): 토큰화된 문자열에서 아직 읽지 않은 토큰의 총 개수를 반환한다. 다음 토큰을 가져오는 데 영향을 주지 않는다.
Share article