[algo] 문자열 다루기 기본

유현영·2020년 2월 1일
0

algo

목록 보기
3/8

문자열 다루기

1. 풀이

문자열 s의 길이가 4 혹은 6이고,
숫자로만 구성돼있는지 확인해주는 함수를 작성해야한다.

public static boolean stringCheck(String s) {
        boolean answer = true;
        if(s.length()==4 || s.length()==6) //문자열의 길이를 먼저 체크하고
        {
            for(int i = 0; i <s.length(); i++) {
                char check = s.charAt(i);
                if(check < 48 || check > 58 || s.equals("")) //아스키 코드로 문자인지 확인
                {
                    return false;
                }
            }
        } else {
            return false;
        }
        return answer;
    }

2. 공부해볼것

🔍정규식
정규식이란?
텍스트를 기술하기 위한 표현 방식으로 특정한 문자열의 검색, 치환, 추출에 있어서 강력한 문법을 제공해줌

정규식 작성방법

기호설명
[]한개의 문자 [abc]- a,b,c 중 하나의 문자 / [^abc] - a,b,c 이외의 문자/ [a-za-z] - a~z, A~Z 중 하나의 문자
\d한개의 숫자, [0-9]와 동일
\D숫자를 제외한 모든 문자
\s공백
\S공백이 아닌 나머지 문자
\w한개의 알파벳 또는 한 개의 숫자
\W알파벳 또는 숫자를 제외한 문자
?없음 또는 한개
.임의의 한 문자
*없음 또는 한개이상
+앞문자가 한개 이상
^문자열의 시작
(?!)대소문자 구분하지 않음
{a}정확히 a개
{a,}최소한 a개
{a,b}a~b개까지
( )그룹핑

활용
회원가입시 올바른 이메일을 작성했는지

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@ [A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$

전화번호 확인

(02|010)-\d{3,4}-\d{4}

제한된 이미지 형식만 허용할때

([^\s]+(\.(?i)(jpg|png|gif|bmp))$)

🔍문자 관련

  • charAt(index) - 문자열 하나하나의 인덱스에 접근하는 메소드
  • subString(start, end) - 원하는 범위 만큼 문자열 잘라내기
  • split("") - 주어진 문자로 분리해서 배열에 저장하기 ( |(파이프)로 구분해서 중복선언 가능 ex. split(", | & | - ") )
  • indexOf(문자) - 해당 문자가 들어있는 위치 알려줌
  • Integer.parseInt() 는 String을 int로 파싱시키는 메소드임으로 (문자가 아닌)정수형 들어오게 된다면 NumberFormatException을 발생시키는 메서드이다.
  • matches() - 문자열에서 (정규식 이용하여) 원하는 패턴이 있는지 true/false를 반환하는 메서드

3. 다른 사람 풀이

정규식을 이용/ matches메소드 해서 푼 케이스

import java.util.*;

class Solution {
  public boolean solution(String s) {
        if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
        return false;
  }
}

정규식 많이 공부하면 활용해 먹을 수 있는 곳이 진짜 많을 거 같다.

Integer.parseInt() 활용해서 푼 케이스

class Solution {
  public boolean solution(String s) {
      if(s.length() == 4 || s.length() == 6){
          try{
              int x = Integer.parseInt(s);
              return true;
          } catch(NumberFormatException e){
              return false;
          }
      }
      else return false;
  }
}
profile
오늘보다 더 나은 내일

0개의 댓글