머리속에서 '분명 이런 기능이 있었는데! 아 검색하고싶다ㅜㅜ' 라는 생각이 들지 않기 위해 복습하려고 적어놓음
정규식 사용시
- patternString 정규표현식 쓰기
- pattern complie 정규표현식으로 패턴 컬파
- matcher 생성
- 활용
예제코드
import java.util.regex.Matcher;
import java.util.regex.Pattern;
pcM{
psvm(){
String patternString = "정규식 문법";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher("검사할 문자열");
// 사용을 예를 들면 단순히 find, group 두개의 메소드가 있다.
System.out.println(matcher.find()); // 매칭된 결과가 있는지? : true
System.out.println(matcher.group()); // 매칭된 부분을 반환 : 1487
}
}
Character를 다루어 대소문자 변환하거나 숫자인지 검사하려면(물론 유니코드도 있지만)
Character 클래스의 static method를 사용해야한다.
Character.toUpperCase(char c)
Character.isDigit(char c)
정수를 01011 이진 문자열로 변경하려면 Integer 클래스의 static method 사용
Integer.toBinaryString(int number)
중복검사를 위해 Set 자료형을 사용할 때 중복인지 아닌지는 Set.add() 함수의 리턴값을 보고 알 수 있음
if(Set.add(thing) == true){
// 중복 아님
}
.stream().sorted(), Arrays.sort() 등 sort함수를 사용할 때 일반적인 정수 배열같은 경우에는 쉽게 정렬이 가능하지만 2차원 배열인 경우에는 다음과 같은 코드를 사용한 적이 있을 것이다. 예제 코드 내용은 Map의 Key,Value를 한번에 들고있는 Map.Entry<K,V> 자료형을 정렬하는 상황이였음
List<Map.Entry<Integer, Integer>> sortedMap = countMap.entrySet().stream().sorted((e1, e2) -> {
if(e2.getValue() == e1.getValue())
return e1.getKey() - e2.getKey();
return e2.getValue() - e1.getValue();
}).collect(Collectors.toList());
핵심은 e1,e2 두개의 Map.Entry<K,V> 자료형을 비교해가며 정렬하라 였는데, 만약 주어진 Map에 원소가 하나뿐이라면 (Key-Value pair 한개) 비교할 두개의 Entry가 없어서 백준에서는 백준의 IndexOutOfBounds Exception이 발생한다.
내 로직에 정렬이 있고, 이상하게 백준 제출시 IndexOutOfBounds Exception이 발생한다면, 위의 상황을 고려해보자.
해결 방법은 정렬 로직 위에 정렬할 Collection or Array의 원소가 한개인 경우 예외 처리 로직 추가하기