-- INDEX --
1. 문자열 중복제거 | 2. 문자배열 중복제거 | 3. Method 체크 |
indexOf() 활용 contains() 활용 |
LinkedHashSet 활용 | indexOf() toCharArrays() contains() String.valueOf() Arrays메소드 { asList(), toString(), copyOf(), Sort() } |
1. 문자열 중복제거
1-1 : if (str.indexOf(str.charAt(i)) == i ) answer += str.charAt(i);
- 문자열에서 해당 문자의 index를 구해서
- 중복 없는 처음이라면 더해주기
- 중복이라면 더해주지 않는다.
public class main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(solution(str));
}//main
private static String solution(String str) {
String answer = "";
for (int i=0; i<str.length(); i++) {
if (str.indexOf(str.charAt(i))==i) answer += str.charAt(i);
}
return answer;
}
}//class
//aaadddeeefff 입력 -- adef 출력
1-2 : for (char x : c) { if (!answer.contains(String.valueOf(x))) answer += x; }
- String.valueof(x) ----> Char x를 String x로 형 변환
- 문자열에서 해당 문자열을 포함하고있지 않다면 더해주기
- 문자열에서 해당 문자열을 이미 포함하고있다면 더해주지 않는다.
public class main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(solution(str));
}//main
private static String solution(String str) {
String answer = "";
char[] c = str.toCharArray();
for (char x : c) {
if (!answer.contains(String.valueOf(x))) answer += x;
}
return answer;
}
}//class
//aaadddeeefff 입력 -- adef 출력
2. 문자배열 중복제거
2-1: LinkedHashSet
- Set인터페이스를 구현하고 Hash Set클래스를 상속받은 Linked List입니다.
- HashSet과 동일하게 데이터 중복을 허용하지 않으며,
- 중복 입력을 할 경우 나중에 입력된 데이터는 입력되지 않는다.
- HashSet과 동일한 구조로 LinkedHashSet은 삽입된 순서대로 반복한다.
- HashSet은 순서를 관리하지 않아 값을 출력할 때마다 다른 순서대로 출력이 된다.
- iteration 작업을 할 경우, Set에 삽입된 순서대로 접근한다.
- .add(Object) , remove(Object) , clear() , size() , iterator() , clone() , contains(Object)
- null element를 허용한다.
- Performance는 HashSet보다 약간 떨어진다고 함.
2-2 : LinkedHashSet 선언
- 선언 : LinkedHashSet<타입> 변수명 = new LinkedHashSet<타입>();
- 타입은 클래스, Integer, String, Character 등 다양한 방식으로 선언이 가능
- LinkedHashSet<String> linkHS = new LinkedHashSet<String>(Arrays.asList(my_string));
- Arrays.asList(String[ ]) -----> 배열을 ArrayList로 변환해 준다.
String[] my_string = {"B","B","C","C"};
LinkedHashSet<String> linkHS = new LinkedHashSet<String>(Arrays.asList(my_string));
String[] answer = linkHS.toArray(new String[] {});
System.out.println(Arrays.toString(answer));
//출력결과 [ B, C ]
3. Method Check
3-1 : indexOf ()
- 문자열 내에서 특정한 문자열의 index값을 return
- 문법 : stringValue.indexOf(searchValue, [fromIndex])
- searchValue - String, 필수, 탐색하고 싶은 문자열
- fromIndex - Integer(0<fromIndex<stringValue.length-1), 옵션
- stringValue에서 특정한 문자열의 위치(index)를 반환한다.
- 탐색하려는 문자열이 존재하지 않는다면 -1을 반환한다.
3-2 : toCharArray()
- String(문자열)을 char형 배열로 바꾼다.
- 문자열을 한 글자씩 쪼개서 이를 char타입의 배열에 집어넣어 주는 메소드.
- 문자열의 각 문자 (즉, 각 Char 개체)를 문자 배열에 복사.
- 복사한 첫 번째 문자가 반환된 문자 배열의 인덱스는 0
- 복사한 마지막 문자의 인덱스는 Array.Length -1
- 문법 : String s1 = "Hello World";
char[] charArr = s1.toCharArray(); - 문자 배열의 문자에서 문자열을 만들려면 생성자를 호출 - String(Char[ ])
3-3 : contains()
- 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다.
- 문법 : boolean contains(CharSequence s)
- 대/소문자를 구분한다.
- 공백도 체크한다.
- return 값은 true || false
3-4 : String.valueOf()
- valueOf(boolean) / valueOf(double) / valueOf(float) / valueOf(int) 등
- () 괄호 안의 해당 객체를 String 객체로 변환시키는 역할을 한다. 말 그대로 String의 객체로 형변환.
- String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환한다.
- toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니어도 출력한다.
- 두 가지 메서드(valueOf() 와 toString())의 차이점은 null값에 따른 NPE의 발생 유무이다.
- 이런 차이점 때문에 valueOf의 null체크 방법은 "null".equals(string) 형태로 체크를 해야 한다.
- null로 인해 발생된 에러는 시간이 지나고, 타인의 소스인 경우 디버깅하기 어렵고 어떤 의미를 내포하고 있는지 판단하기 어렵다. 때문에 NPE를 방지하기 위해 toString보다는 valueOf를 사용하는 것을 추천
- return 값은 String
3-5 : Arrays 메소드
3-5-1 : Arrays.asList(T..a) :
- 배열을 ArrayList로 변환해 준다.
- 배열은 크기가 정해져 있고 값의 삭제 등이 자유롭지 않아 불편한 점이 많다.
- asList()를 사용하여 리스트로 변환한 후
- 체인메소드(chain method) 방식으로
- ArrayList의 메소드를 더하여 활용하면 여러모로 편리한 점이 많다.
3-5-2 : Arrays.toString()
- 배열에도 toString이 존재한다.
- 배열 자체에서 toString()을 사용하면 배열의 내용이 아니라 배열의 주소값이 출력된다.
- 배열의 내용을 출력하려면 Arrays.toString(배열)을 사용해야 한다.
3-5-3 : Arrays.copyOf(array, int newlength)
- 배열을 복사한다.
- 특정 배열의 원하는 길이만큼 새로운 배열로 복사하는 함수
- 새로운 배열 = Arrays.copyOf(원본 배열, 원본 배열에서 복사하고 싶은 요소들의 길이);
- 복사받는 배열(arr3)이 복사하는 배열(arr1)보다 범위를 크게 지정해 주면
- 해당 초과하는 범위는 배열타입의 default 값이 들어가게 된다.
- 다른 배열을 복사 방법도 체크
- { Object.clone, Arrays.copyOf, Arrays.copyOfRange, System.arrayCopy }
3-5-3 : Arrays.Sort(array)
- 정렬은 쓰이는 곳이 굉장히 많은데 기본적으로 Sort()를 하면 오름차순 정렬이 된다.
- 정수형 배열을 내림차순 정렬하고 싶으면
- 반복문으로 배열을 뒤에서부터 꺼내 담아주거나 하는 방식을 사용할 수 있다.
Sort(array, Comparator)
- Collections.reverseOrder() 라는 메소드가 있는데, sort의 첫 번째 파라미터에 문자형 배열을 담고 두 번째 파라미터에 Collections.reverseOrder() 를 담으면 문자형 배열을 내림차순 정렬해 준다.
Sort(array, int fromindex, int toindex)
- 인덱스의 시작과 끝을 정해 fromindex부터 toindex-1까지만 오름차순 정렬할 수도 있다.
Sort(array, int fromindex, int toindex, Comparator)
- 두 번째와 세 번째를 조합할 수도 있다!
import java.util.Arrays;
import java.util.Collections;
public class Arrays_ {
public static void main(String[] args) {
String[] a = {"a","b","c","d"};
int[] b = {1,5,5,7,3,3,42,6,8,45323,4,63,2,1};
System.out.println(Arrays.asList(a)); //List로
Arrays.sort(b,4,14); //인덱스정렬
System.out.println(Arrays.toString(b));
Arrays.sort(b); //오름차순정렬
System.out.println(Arrays.toString(b)); // string으로
Arrays.sort(a, Collections.reverseOrder()); //문자형 배열을 거꾸로
System.out.println(Arrays.toString(a));
Arrays.sort(a);
Arrays.sort(a, 2,4,Collections.reverseOrder());
System.out.println(Arrays.toString(a));
String[] cc = {"11","12","13","23","53","223","145","53"};
Arrays.sort(cc, Collections.reverseOrder());
System.out.println(Arrays.toString(cc));
int[] c = Arrays.copyOf(b, 5); //복사
System.out.println(Arrays.toString(c));
String[] d = Arrays.copyOf(a, 2);
System.out.println(Arrays.toString(d));
}
}
[a, b, c, d]
[1, 5, 5, 7, 1, 2, 3, 3, 4, 6, 8, 42, 63, 45323]
[1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 42, 63, 45323]
[d, c, b, a]
[a, b, d, c]
[53, 53, 23, 223, 145, 13, 12, 11]
[1, 1, 2, 3, 3]
'Programmers > JAVA' 카테고리의 다른 글
[ 프로그래머스 ] 가장 가까운 같은 글자 - Java (0) | 2023.01.13 |
---|---|
[ 프로그래머스 ] JadenCase 문자열 만들기 - Java (0) | 2023.01.10 |
[ 프로그래머스 ] 마법의 엘리베이터 - Java (0) | 2023.01.06 |
[ 프로그래머스 ] 숫자 문자열과 영단어 - Java (0) | 2023.01.06 |
[ 프로그래머스 ] 비밀지도 - Java (0) | 2023.01.06 |