Java 에서 문자열이 특정 부분 문자열을 포함하는지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 문자열에 특정 부분 문자열이 포함되어 있는지 확인하는 방법을 배우게 됩니다. 이 일반적인 작업에 대한 다양한 방법을 살펴보고, 간단한 contains() 메서드부터 시작합니다. contains()를 사용하여 문자열에 주어진 문자 시퀀스가 포함되어 있는지 확인하는 방법을 배우고, 간단한 Java 프로그램에서 이를 구현하는 연습을 할 것입니다.

contains()에 대한 소개에 이어, 이 랩에서는 indexOf() 메서드를 사용하여 부분 문자열의 존재 여부를 확인하는 것뿐만 아니라 문자열 내에서의 위치를 찾는 방법도 안내합니다. 마지막으로, 대소문자를 구분하지 않는 부분 문자열 검사를 수행하는 기술을 배우게 되며, 코드가 대문자/소문자 변형을 처리할 수 있도록 합니다. 이 랩을 마치면 Java 에서 부분 문자열 검사에 대한 다양한 접근 방식에 대한 확실한 이해를 갖게 될 것입니다.

contains() 를 사용하여 부분 문자열 검색

이 단계에서는 contains() 메서드를 사용하여 Java 에서 문자열에 특정 부분 문자열이 포함되어 있는지 확인하는 방법을 배우겠습니다. 이는 프로그래밍에서 흔히 사용되는 작업으로, 예를 들어 문장에서 키워드를 검색하거나 파일 이름에 특정 확장자가 포함되어 있는지 확인할 때 사용됩니다.

contains() 메서드는 Java 의 String 클래스에 포함되어 있습니다. 문자열에 지정된 문자 시퀀스가 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

contains() 사용을 연습하기 위해 새로운 Java 파일을 만들어 보겠습니다.

  1. WebIDE 의 왼쪽에서 파일 탐색기를 엽니다.

  2. ~/project 디렉토리에 있는지 확인합니다.

  3. 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 "새 파일"을 선택합니다.

  4. 새 파일의 이름을 StringContains.java로 지정합니다.

  5. 편집기에서 StringContains.java 파일을 엽니다.

  6. 다음 코드를 복사하여 편집기에 붙여넣습니다.

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Check if the sentence contains the keyword
            boolean containsKeyword = sentence.contains(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword? " + containsKeyword);
    
            String anotherKeyword = "Python";
            boolean containsAnotherKeyword = sentence.contains(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
            System.out.println("Does the sentence contain the another keyword? " + containsAnotherKeyword);
        }
    }

    이 코드에서:

    • String 변수 sentenceString 변수 keyword를 선언합니다.
    • sentence.contains(keyword)를 사용하여 sentencekeyword의 문자 시퀀스가 포함되어 있는지 확인합니다. 결과는 boolean 변수 containsKeyword에 저장됩니다.
    • 원래 문장, 키워드 및 contains() 검사 결과를 출력합니다.
    • 부분 문자열이 발견되지 않는 경우의 결과를 확인하기 위해 다른 키워드인 "Python"으로 프로세스를 반복합니다.
  7. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  8. WebIDE 하단에서 터미널을 엽니다.

  9. 다음 명령을 사용하여 ~/project 디렉토리에 있는지 확인합니다.

    cd ~/project
  10. javac 명령을 사용하여 Java 프로그램을 컴파일합니다.

    javac StringContains.java

    오류가 없으면 아무런 출력도 표시되지 않습니다. ~/project 디렉토리에 StringContains.class 파일이 생성됩니다.

  11. java 명령을 사용하여 컴파일된 Java 프로그램을 실행합니다.

    java StringContains

    다음과 유사한 출력을 볼 수 있습니다.

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    Does the sentence contain the keyword? true
    
    Another keyword: "Python"
    Does the sentence contain the another keyword? false

    이 출력은 contains() 메서드가 문장에 "programming"이 포함되어 있음을 올바르게 식별했지만 "Python"은 포함되어 있지 않음을 보여줍니다.

부분 문자열 위치 확인을 위한 indexOf() 탐구

이전 단계에서는 contains()를 사용하여 문자열에 부분 문자열이 포함되어 있는지 확인하는 방법을 배웠습니다. 이제 부분 문자열의 존재 여부를 알려줄 뿐만 아니라 문자열 내에서의 시작 위치도 알려주는 또 다른 유용한 메서드인 indexOf()를 살펴보겠습니다.

Java 의 String 클래스에 있는 indexOf() 메서드는 지정된 부분 문자열이 처음 나타나는 문자열 내의 인덱스를 반환합니다. 인덱스는 부분 문자열의 첫 번째 문자의 위치입니다. 프로그래밍에서 인덱싱은 일반적으로 0 부터 시작한다는 것을 기억하십시오. 부분 문자열이 발견되지 않으면 indexOf()는 -1 을 반환합니다.

indexOf() 메서드를 사용하도록 이전 Java 파일인 StringContains.java를 수정해 보겠습니다.

  1. WebIDE 편집기에서 StringContains.java 파일을 엽니다.

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Find the index of the keyword
            int index = sentence.indexOf(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index: " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found.");
            }
    
            String anotherKeyword = "Python";
            int anotherIndex = sentence.indexOf(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
    
            if (anotherIndex != -1) {
                System.out.println("The keyword \"" + anotherKeyword + "\" was found at index: " + anotherIndex);
            } else {
                System.out.println("The keyword \"" + anotherKeyword + "\" was not found.");
            }
        }
    }

    이 업데이트된 코드에서:

    • sentence.indexOf(keyword)를 사용하여 sentence 내에서 keyword의 시작 인덱스를 찾습니다. 결과는 int 변수 index에 저장됩니다.
    • if 문을 사용하여 반환된 index가 -1 인지 확인합니다. -1 이 아니면 키워드가 발견되었음을 의미하며 해당 인덱스를 출력합니다. 그렇지 않으면 키워드가 발견되지 않았다는 메시지를 출력합니다.
    • 부분 문자열이 없는 경우를 보여주기 위해 "Python"에 대해 프로세스를 반복합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. WebIDE 하단에서 터미널을 엽니다.

  5. ~/project 디렉토리에 있는지 확인합니다.

  6. 수정된 Java 프로그램을 컴파일합니다.

    javac StringContains.java
  7. 컴파일된 Java 프로그램을 실행합니다.

    java StringContains

    다음과 유사한 출력을 볼 수 있습니다.

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    The keyword "programming" was found at index: 5
    
    Another keyword: "Python"
    The keyword "Python" was not found.

    출력은 "programming"이 문장에서 인덱스 5 에서 시작함을 보여줍니다 (공백을 포함하여 'J'는 인덱스 0, 'a'는 인덱스 1 등). 또한 "Python"이 발견되지 않았음을 올바르게 나타냅니다.

    indexOf()를 사용하면 부분 문자열의 존재 여부를 확인할 뿐만 아니라 정확한 위치를 결정하는 강력한 방법이며, 이는 다양한 문자열 조작 작업에 유용할 수 있습니다.

대소문자 구분 없는 부분 문자열 검사 구현

이전 단계에서는 contains()indexOf()를 사용하여 부분 문자열을 검색했습니다. 그러나 이러한 메서드는 대소문자를 구분합니다. 즉, "Java"는 "java" 또는 "JAVA"와 다른 것으로 간주됩니다. 많은 경우 대소문자를 구분하지 않는 검색을 수행하려고 할 수 있습니다.

Java 의 String 클래스에는 containsIgnoreCase() 또는 indexOfIgnoreCase()와 같은 내장 메서드가 없습니다. 그러나 검색을 수행하기 전에 원래 문자열과 부분 문자열을 동일한 대소문자 (소문자 또는 대문자) 로 변환하여 대소문자를 구분하지 않도록 할 수 있습니다. 가장 일반적인 방법은 toLowerCase() 메서드를 사용하여 둘 다 소문자로 변환하는 것입니다.

대소문자를 구분하지 않는 검색을 수행하도록 StringContains.java 파일을 다시 수정해 보겠습니다.

  1. WebIDE 편집기에서 StringContains.java 파일을 엽니다.

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "JAVA"; // Using uppercase for demonstration
    
            // Convert both strings to lowercase for case-insensitive comparison
            String lowerSentence = sentence.toLowerCase();
            String lowerKeyword = keyword.toLowerCase();
    
            // Use contains() on the lowercase strings
            boolean containsKeyword = lowerSentence.contains(lowerKeyword);
    
            System.out.println("Original Sentence: \"" + sentence + "\"");
            System.out.println("Original Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword (case-insensitive)? " + containsKeyword);
    
            // You can also use indexOf() in a case-insensitive way
            int index = lowerSentence.indexOf(lowerKeyword);
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index (case-insensitive): " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found (case-insensitive).");
            }
        }
    }

    이 코드에서:

    • keyword를 "JAVA"(대문자) 로 정의합니다.
    • toLowerCase()를 사용하여 원래 문자열을 소문자로 변환하여 새로운 문자열 lowerSentencelowerKeyword를 생성합니다.
    • 그런 다음 소문자 문자열에 contains() 메서드를 사용하여 대소문자를 구분하지 않는 검사를 수행합니다.
    • 또한 소문자 문자열에 적용하여 indexOf()를 대소문자를 구분하지 않는 방식으로 사용하는 방법을 보여줍니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. WebIDE 하단에서 터미널을 엽니다.

  5. ~/project 디렉토리에 있는지 확인합니다.

  6. 수정된 Java 프로그램을 컴파일합니다.

    javac StringContains.java
  7. 컴파일된 Java 프로그램을 실행합니다.

    java StringContains

    다음과 유사한 출력을 볼 수 있습니다.

    Original Sentence: "Java programming is fun and powerful."
    Original Keyword: "JAVA"
    Does the sentence contain the keyword (case-insensitive)? true
    The keyword "JAVA" was found at index (case-insensitive): 0

    이 출력은 원래 키워드가 "JAVA"(대문자) 였음에도 불구하고 대소문자를 구분하지 않는 검색이 문장에서 이를 올바르게 찾아 해당 인덱스 (소문자 "Java"의 경우 0) 를 보고했음을 보여줍니다.

    검색 전에 문자열을 일관된 대소문자로 변환하면 Java 에서 대소문자를 구분하지 않는 부분 문자열 검사를 쉽게 수행할 수 있습니다.

요약

이 Lab 에서는 Java 에서 문자열에 특정 부분 문자열이 포함되어 있는지 확인하는 방법을 배웠습니다. 먼저 부분 문자열의 존재 여부를 간단하게 부울 (boolean) 로 확인하는 contains() 메서드를 사용했습니다. 이 메서드는 간단하며 기본적인 부분 문자열 존재 확인에 유용합니다.

그런 다음 부분 문자열의 존재 여부를 확인할 뿐만 아니라 첫 번째 발생의 시작 인덱스도 반환하는 indexOf() 메서드를 탐색했습니다. 이를 통해 문자열 내에서 부분 문자열의 위치를 보다 자세하게 분석할 수 있습니다. 마지막으로, 원래 문자열의 대소문자와 관계없이 이를 달성하는 기술을 시연하여 대소문자를 구분하지 않는 부분 문자열 검사를 수행하는 일반적인 요구 사항을 해결했습니다.