아두이노 Arduino

[아두이노] String함수: indexof, substring, length (텍스트 검색, 위치 찾기)

끄적끄적아무거나 2022. 5. 11. 18:15
반응형

 

목차

     

    이번 포스트는 문자열 (String) 관련 함수들 중에 중요 함수에 대해 알아보도록 하겠습니다. 함수를 코드로 돌리고 확인은 Arduino에서 제공하는 시리얼 모니터로 하겠습니다. 시리얼(Serial) 통신 사용 방법 및 모니터링 방법은 아래 링크를 참조하시면 됩니다. (https://scribblinganything.tistory.com/512)


     

    Arduino String 함수 : indexOf 

     

    indexOf 함수는 문자열에서 원하는 문자(Character)나 부분 문자열(String)을 검색해주고 해당 문자의 위치를 index 번호 0부터 시작해서 시작 위치를 정수(integer)로 알려 줍니다

     

     

    indexOf 함수의 Syntax는 아래와 같습니다.

     

    문자열변수.indexOf("찾을 문자", 찾기시작위치)

     

    위에서 찾기 시작위치를 입력하지 않으면 default로 0 index 위치 부터 글자를 찾기 시작합니다.

     

    아래 예제 코드를 보시면 쉽게 이해할 수 있습니다. 

     

     

    예제 코드>>

    void setup() {
    
      Serial.begin(9600);
      while (!Serial) {
        ;
      }
    }
    
    String s_var = "Hello,world! My name is James77";
    int index_no1 = s_var.indexOf("wo");
    int index_no2 = s_var.indexOf('l',index_no1+1);
    
    void loop() {
        Serial.print("index_no1 : ");
        Serial.println(index_no1);
        Serial.print("index_no2 : ");
        Serial.println(index_no2);  
        delay(500);
    }

    1~7번 라인: Serial 통신 연결

    9번 라인: 검색에 사용할 문자열 s_var 변수에 넣기

    10번 라인: wo 의 문자열(String)을 검색, 문자열 검색을 위해 쌍따음표 사용, return 값은 int 로 저장

    11번 라인: wo 다음 글 중에 l 로 시작하는 문자(Character) 검색, 문자 검색을 위해 외따움표 사용

    13~17 라인: index 결과를 loop로 계속 출력

     

     

    결과>>

    wo는 6번째 인덱스에서 발견

    wo 뒤에 나온 l 은 9번째 인덱스에 발견 됨

     

     

     

     

     

     

     

     

     

     

    Arduino String 함수 : substring

     

    substring은 일반적으로 indexOf 함수와 같이 많이 사용 됩니다. indexOf 함수에서 찾고자 하는 문자를 검색해서 위치를 알려주면 substring은 위치 정보로 해당 문자를 가져올 수 있습니다

     

    substring의 Syntax는 아래와 같습니다. 

     

     

    문자열변수.substring(가져올문자시작index, 가져올문자끝index)

     

     

    입력 값의 index는 정수값(integer)를 사용합니다.

     

     

    앞서 indexOf 예제에 연장선상으로 코드를 작성해보겠습니다.

     

     

    예제 코드>>

    void setup() {
    
      Serial.begin(9600);
      while (!Serial) {
        ;
      }
    }
    
    String s_var = "Hello,world! My name is James77";
    int index_no1 = s_var.indexOf("James");
    String name_info = s_var.substring(index_no1,index_no1+5);
    
    void loop() {
        Serial.print("Name : ");
        Serial.println(name_info);
        delay(500);
    }

    10번 라인: James라는 문자열을 검색합니다.

    11번 라인: James의 시작 위치를 이용해서 해당 문자열을 substring으로 가져옵니다.

     

     

    결과>>

     

     

     

     

     

     

    Arduino String 함수 : length

     

    length 함수는 말그대로 문자열의 길이를 알려주는 함수 입니다. 

     

    간단하게 앞서 예제 구현에서 길이 정보를 입력해서 더 쉽게 문자열을 가져올 수 있습니다.

     

    예제 코드>>

    void setup() {
    
      Serial.begin(9600);
      while (!Serial) {
        ;
      }
    }
    
    String s_var = "Hello,world! My name is James77";
    String name_search = "James";
    int len_name = name_search.length();
    int index_no1 = s_var.indexOf("James");
    String name_info = s_var.substring(index_no1,index_no1+len_name);
    
    void loop() {
        Serial.print("Name : ");
        Serial.println(name_info);
        delay(500);
    }

    10~11번 라인: James 라는 문자열의 길이를 구합니다. 결과적으로 코드가 더 많아진 비효율적인 코드가 되었지만 코드가 커지고 반복사용에서  length가 유용해집니다.

     

    결과>>

     

     

    반응형