【Java-문자열】문자열 안에서 특정단어 찾기

【Java-문자열】문자열 안에서 특정단어 찾기

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 getMatchedStrs (String targetStr, String regex) { List 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. 전체코드

https://github.com/leeyoungseung/template-java

from http://koiking.tistory.com/23 by ccl(A) rewrite - 2021-09-08 00:27:21