본문 바로가기
프로그래밍/Java-자주쓰는예제

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

by 코이킹 2021. 9. 8.
반응형

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. 전체코드

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

반응형

댓글