1. 설명
텍스트(문자열)안에서 특정단어가 있는지 없는지, 패턴에 맞는 단어가 있는지 없는지를 확인하는 상황이 실무에서도 많이 있습니다.
컴색해야하는 파일이 어디있는지 알고 있다면 사실 grep과 같은 커맨드를 사용하는게 더 나은 선택이라고 생각합니다만,
저의 경우 Java로 된 하나의 프로그램의 흐름에서 특정패턴의 문자를 검색해야하는 상황이 생겼기에 문자열안에서 문자열을 검색하는 코드를 Java로 작성했습니다.
구현은 문자열안에 String 클래스의 메서드인
2. 소스코드
- 문자열 안에 찾는 문자열이 있는지 확인
public boolean hasStrInTarget(String targetStr, String findStr) {
return targetStr.contains(findStr);
}
public boolean isMatch (String targetStr, String regex) {
return targetStr.matches(regex);
}
String 클래스에서 제공해주는 contains 메서드와 matches를 사용했습니다.
contains메서드는 찾는 문자열과 완전히 일치하는 문자열이 검색대상 문자열안에 있다면 true를 반환합니다.
matches메서드는 지정한 패턴의 문자열이 검색대상 문자열안에 있다면 true를 반환합니다.
※ 이제 와서 생각해보니 궂이 라이브러리에 추가하지 않아도 될것같습니다...
- 찾는 문자열의 위치확인
public int [] getFindStrIndexsInTarget(String targetStr, String findStr) {
int startIndex = targetStr.indexOf(findStr);
if (startIndex == -1)
return null;
int lastIndex = startIndex + (findStr.length() - 1);
return new int[] { startIndex, lastIndex };
}
String클래스에서 제공하는 indexOf 메서드를 사용해 구현했습니다.
indexOf메서드는 찾는 문자열의 시작문자 Index를 반환해 주므로 Index값에 찾는 문자열의 길이 만큼의 수를 더해주면
찾는 문자열의 마지막 문자의 Index를 알 수 있게됩니다.
이 메서드에서는 위의 방식으로 구한 찾는문자열의 시작과 끝의 Index를 배열에 담아 리턴합니다.
- 찾는 문자열의 리스트 가져오기
public List<String> getMatchedStrs (String targetStr, String regex) {
List<String> list = new ArrayList<>();
Pattern.compile(regex).matcher(targetStr).results().forEach(result -> {
list.add(result.group());
});
return list;
}
찾는 문자열의 패턴매치의 결과를 List로 반환합니다.
List로 결과를 받으면 검색에 일치하는 숫자와 패턴에 매치하는 문자열을 동시에 알수 있어 편했습니다.
- 메인 클래스
public class Str_03_SearchWord {
public static void main(String[] args) {
StrUtil su = new StrUtil();
String ex1 = "hello||test1||String||test2,,test3";
String ex2 = "hello";
String pattern1 = "hello";
String pattern2 = ".*hello.*";
String pattern3 = ".*[a-z]{4,5}.*";
String pattern4 = "test[0-9]";
// 문자열 검색
System.out.println("Search1 :"+su.hasStrInTarget(ex1, pattern1));
System.out.println("Search2 :"+su.isMatch(ex1, pattern1)); // Pattern이 일치하지 않으니 false
System.out.println("Search3 :"+su.isMatch(ex2, pattern1)); // Pattern이 일치하므로 true
System.out.println("Search4 :"+su.isMatch(ex1, pattern2)); // Pattern이 일치하므로 않으니 true
System.out.println("Search5 :"+su.isMatch(ex1, pattern3)); // Pattern이 일치하므로 않으니 true
// 위치 찾기
int res[] = su.getFindStrIndexsInTarget(ex1, pattern1);
System.out.println("Search6 :"+res[0] +", "+ res[1]);
// 문자열 검색 결과 모두 가져오기
System.out.println("Search7 :"+su.getMatchedStrs(ex1, pattern4));
}
}
3. 실행결과【Windows(이클립스) / Linux】
4. 전체코드
'프로그래밍 > Java-자주쓰는예제' 카테고리의 다른 글
【Java-파일】파일생성과 파일에 내용입력 하기 (0) | 2021.09.11 |
---|---|
【Java-문자열】문자열 안의 개행문자 제거 (0) | 2021.09.08 |
【Java-문자열】문자열 안의 공백제거(전각 / 반각) (0) | 2021.09.08 |
【Java-문자열】문자열 합치기 (0) | 2021.09.07 |
【Java-문자열】문자열 자르기 (0) | 2021.09.07 |
댓글