str.indexOf()
문자열에서 특정 문자를 탐색해서 처음 일치하는 인덱스 위치를 정수형으로 반환한다. 단, 일치하는 문자가 없는 경우 -1을 반환한다. ()안에 문자, 문자열 다 가능하다.
substring
문자열의 일부분을 잘라내어 새로운 문자열 반환. 원본 영향 x substring(시작index, 끝index +1) ->(0,3)으롤 주면
index 0~2까지 잘린다.
* 설명
한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요.
문장속의 각 단어는 공백으로 구분됩니다.
* 입력
첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다.
문장은 영어 알파벳으로만 구성되어 있습니다.
* 출력
첫 줄에 가장 긴 단어를 출력한다.
가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다.
나는 StringTokenizer를 이용하여 풀었는데, 강의에서는 다른 방법 2가지를 가지고 풀었다.
class Main {
public String Solution(String str){
StringTokenizer stoken = new StringTokenizer(str, " ");
String answer = "";
while(stoken.hasMoreTokens()){
// System.out.println(stoken.nextToken());
String str2 = stoken.nextToken();
if(str2.length() > answer.length()) answer = str2;
}
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(main.Solution(str));
}
}
split이용
String answer = "";
int m = Integer.MIN_VALUE:
String[] s = str.split("");
for(String x : s){
int len = x.lenght();
if(len > m){
m = len;
answer = x;
}
}
toString / indexOf 이용
* substring을 통해 " "앞까지 계속 잘라서 len을 비교해주고,
원본 str을 앞이 잘린 부분 이후부터 다시 시작한다.
주의할 점은, while( =! -1)을 사용할 경우, 마지막 단어에는 " "가 포함되지 않기때문에
꼭 return문 전에 한 번 더 체크를 해야한다.
public String Solution(String str) {
String answer = "";
int maxLen = Integer.MIN_VALUE, pos;
while ((pos = str.indexOf(" ")) != -1) {
String word = str.substring(0, pos);
int len = word.length();
if (len > maxLen) {
maxLen = len;
answer = word;
}
str = str.substring(pos + 1);
}
if(str.length() > maxLen) answer = str;
return answer;
String은 불변객체라 값이 변하면 계속 객체를 생성하지만,
StringBuilder는 한 번 만들어진 객체(주소값)을 계속 사용하기 때문에 구동이 가벼워진다. 많은 String을 처리해야 할 때에 사용된다.
StringBuffer는 스레드 동기화 기능 제공하는데,
스레드 동기화가 필요하지 않은 부분까지 다 처리를 하니까 속도가 느려지게 된다.
->StringBuilder로 개선 (스레드 동기화 x) 사용 방법은 같다.
* 설명
N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.
* 입력
첫 줄에 자연수 N(3<=N<=20)이 주어집니다.
두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다.
단어는 영어 알파벳으로만 구성되어 있습니다.
* 출력
public ArrayList<String> solutions(String[] str) {
ArrayList<String> answer = new ArrayList<>();
for (String word : str) {
String tmp = new StringBuilder(word).reverse().toString();
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) {
Main main = new Main();
int num = sc.nextInt();
String[] str = new String[num];
for (int i = 0; i < str.length; i++) {
str[i] = sc.next();
}
for(String x : main.solutions(str)){
System.out.println(x);
}
}
}
public ArrayList<String> solutions(String[] str) {
ArrayList<String> answer = new ArrayList<>();
for (String word : str) {
char[] chArray = word.toCharArray();
int sIndex = 0, lIndex = word.length() -1;
while(sIndex < lIndex){
char tmp = chArray[sIndex];
chArray[sIndex] = chArray[lIndex];
chArray[lIndex] = tmp;
sIndex++;
lIndex--;
}
answer.add(String.valueOf(chArray));
}
return answer;
}