[JAVA] 문자열 딱대

Sangil Park ·2025년 1월 26일

JAVA

목록 보기
3/3

문자열 안에 문자열

https://school.programmers.co.kr/learn/courses/30/lessons/120908?language=java

public int solution(String str1, String str2) {
        int answer = 0;
        
		answer = str1.contains(str2)?1:2;
        
        return answer;
}
  • String.contains()
  • 정규식을 사용해야 하나 생각했는데 String.contains()이 있었음
  • 삼항 연산자는 반환을 위해 사용함

문자열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/120822

class Solution {
    public String solution(String my_string) {
        String answer = "";
        
        StringBuilder sb = new StringBuilder(my_string);
        answer = sb.reverse().toString();
        
        return answer;
    }
}
  • StringBuilder.reverse()
  • StringBuilder.toString()
  • 문자열 읽어서 확인하는 건 String 문자열 조작(수정)하는 건 StringBuilder

문자열로 변환

https://school.programmers.co.kr/learn/courses/30/lessons/181845

class Solution {
    public String solution(int n) {
        String answer = "";
        
        answer = Integer.toString(n);
        
     return answer;
    }
}
class Solution {
    public String solution(int n) {
        String answer = "";
        
        answer = String.valueOf(n);
        
     return answer;
    }
}

  • Integer.toString()
  • String.valueOf()
  • toString()은 변수의 경우 보이는 값을 문자열로 변환하고, 객체혹은 배열은 다르게 동작함
    • Wrapper클래스에 존재함

문자열을 정수로 변환하기

https://school.programmers.co.kr/learn/courses/30/lessons/181848

class Solution {
    public int solution(String n_str) {
        int answer = 0;
        
        answer = Integer.parseInt(n_str);
        
        return answer;
    }
}
  • Integer.parseInt()

문자열 정수의 합

https://school.programmers.co.kr/learn/courses/30/lessons/181849

public int solution(String num_str) {
        int answer = 0;
        
        for (char c : num_str.toCharArray()){   
            answer += c-'0';
        }
        
        return answer;
    }
  • 문자 -> 정수 간단한 변환인데 아래처럼 복잡하게도 가능할 듯
public int solution(String num_str) {
        int answer = 0;
        
        for (char c : num_str.toCharArray()){
            answer += Integer.parseInt(Character.toString(c));
        }
        
        return answer;
    }

문자열 바꿔서 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/181864

public int solution(String myString, String pat) {
        int answer = 0;
        
        StringBuilder sb = new StringBuilder();
        
        for (char c : myString.toCharArray()){
            if(c == 'A') sb.append('B');
            else if (c=='B') sb.append('A');
        }
        answer = sb.toString().contains(pat)?1:0;
                
        return answer;
}
  • toCharArray()
  • toString()
  • contains()

배열에서 문자열 대소문자 변환하기

https://school.programmers.co.kr/learn/courses/30/lessons/181875

public String[] solution(String[] strArr) {
        String[] answer = {};
        answer = strArr.clone();
        
        for(int i = 0 ; i < answer.length;i++){
            if (i%2==0) {
             answer[i] = answer[i].toLowerCase();
            }else{
             answer[i] = answer[i].toUpperCase();
            }
        }
        
        return answer;
    }
  • String.toUpperCase()
  • String.toLowerCase()
  • Object.clone()
    • Object는 자바의 최상위 클래스

원하는 문자열 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/181878

public int solution(String myString, String pat) {
        int answer = 0;
        
        answer = myString.toLowerCase().contains(pat.toLowerCase())?1:0;
        
        return answer;
}
  • String.toLowerCase()
  • String.contains()

문자열의 앞의 n글자

https://school.programmers.co.kr/learn/courses/30/lessons/181907

public String solution(String my_string, int n) {
        String answer = "";
        
        answer = my_string.substring(0,n);
        
        return answer;
    }
  • String.substring(int beginIndex, int endIndex)
    • substring은 하나의 단어라 소문자로 적는거 조심 ㅋㅋ

문자열의 뒤의 n글자

https://school.programmers.co.kr/learn/courses/30/lessons/181910

public String solution(String my_string, int n) {
        String answer = "";
        
        answer = my_string.substring(my_string.length()-n);
        
        return answer;
}
  • String.length()
  • String에서 length는 필드가 아닌 함수!

부분 문자열 이어 붙여 문자열 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/181911

public String solution(String[] my_strings, int[][] parts) {
        String answer = "";
        
        StringBuilder sb = new StringBuilder();
        for (int i=0 ;i<my_strings.length;i++){
            sb.append(my_strings[i].substring(parts[i][0],parts[i][1]+1));
        }
        answer = sb.toString();
        
        return answer;
    }
  • StringBuilder.toString()

글자 이어 붙여 문자열 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/181915

public String solution(String my_string, int[] index_list) {
        String answer = "";
        
        StringBuilder sb = new StringBuilder();
        for(int idx : index_list){
            sb.append(my_string.charAt(idx));
        }        
        answer = sb.toString();
        
        return answer;
    }
  • String.charAt(int index)
  • StringBuilderappend()메소드를 오버로드 하고 있어서 문자도 추가가능
    • append(char c)

문자열 돌리기

https://school.programmers.co.kr/learn/courses/30/lessons/181945

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        
        StringBuilder sb = new StringBuilder();

        for (int i =0;i<a.length();i++){
            sb.append(a.charAt(i)+"\n");
        }
        
        System.out.println(sb);
    }

문자열 정렬하기 (1)

https://school.programmers.co.kr/learn/courses/30/lessons/120850

public int[] solution(String my_string) {
        my_string = my_string.replaceAll("[a-z]","");
        
        int[] answer = new int[my_string.length()];
        
        for (int i = 0; i < answer.length ; i++){
            answer[i] = my_string.charAt(i)-'0';
        }
        Arrays.sort(answer);
        
        return answer;
    }
  • replaceAll(String regex, String replacement)
  • 추가로 toCharArray말고도 .split("")으로 나누는 방법도 있음

문자열 곱하기

https://school.programmers.co.kr/learn/courses/30/lessons/181940

public String solution(String my_string, int k) {
        String answer = my_string.repeat(k);
        return answer;
    }
  • repeat(int count)

문자열 정렬하기 (2)

https://school.programmers.co.kr/learn/courses/30/lessons/120911

public String solution(String my_string) {
        char[] cArr  = my_string.toLowerCase().toCharArray();
        Arrays.sort(cArr);
        
        return new String(cArr);
    }
  • public String(char[] value)
  • 문자 배열을 String으로 변환할때 생성자 패턴을 사용함
    • String 생성자는 문자열 관련 객체들만 가능함

문자열 잘라서 정렬하기

https://school.programmers.co.kr/learn/courses/30/lessons/181866

public String[] solution(String myString) {
        String[] answer = {};
        
        myString = myString.replaceAll("(^x+)|(x+$)","");
        answer = myString.split("x+");
        
        Arrays.sort(answer);
        
        return answer;
    }
  • String.replace() vs String.replaceAll()

    • replace(CharSequence target, CharSequence replacement)regex를 지원하지 않는다..!
    • replaceAll(String regex, String replacement)만 regex지원함
  • 어 근데 split()은 또 regex 지원하네
  • 빈문자열을 배열에 저장하지 않기 위해 정규식을 이용해서 반레들을 제거하는 아이디어가 매우 유용했음

문자열 내 p와 y의 개수

https://school.programmers.co.kr/learn/courses/30/lessons/12916

boolean solution(String s) {

        s = s.toLowerCase();
        
        int ps = s.length() - s.replace("p","").length();
        int ys = s.length() - s.replace("y","").length();
        
        return ps == ys;
    }
  • replace(char oldChar, char newChar)는 문자 1개를 문자1개로 바꾸기 때문에 빈문자로는 못바꾼다. 대신 replace(CharSequence target, CharSequence replacement)로 문자열 -> 문자열 로 변환하면 된다.

문자열이 몇 번 등장하는지 세기

https://school.programmers.co.kr/learn/courses/30/lessons/181871

public int solution(String myString, String pat) {
        int answer = 0;
        
        int plength = pat.length();
        for (int i = 0; i < myString.length()-(plength-1);i++){
            if(myString.substring(i,i+plength).equals(pat)) answer++;
        }
        
        return answer;
    }
  • 슬라이딩 윈도우 방식

    • 윈도우 크기를 유지하면서 substring을 이용해 패턴 찾는 아이디어 좋음
  • equals(Object anObject) vs ==
    • ==는 객체의 경우 주소가 같은 동일한 객체 여부를 조사하는 반면
    • equals는 객체의 경우 객체가 가진 값을 조사한다.
    • 기본 타입의 경우 둘은 동일하게 동작한다.

특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

public String solution(String myString, String pat) {
        
        return myString.substring(0,myString.lastIndexOf(pat)+pat.length());
        
    }

문자열 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/181905

원래 풀이

public String solution(String my_string, int s, int e) {
        String answer = "";
        StringBuilder sb = new StringBuilder(my_string.substring(s,e+1));
        sb.reverse();
        
        return my_string.substring(0,s)+sb.toString()+my_string.substring(e+1);
    }
  • substring에서 범위가 (0,0) 이런식으로 되면 빈 문자열을 리턴함

색다른 방식

public String solution(String my_string, int s, int e) {
        String answer = "";
        
        StringBuilder sb1 = new StringBuilder(my_string);
        StringBuilder sb2 = new StringBuilder(my_string.substring(s,e+1));
        sb2.reverse();
        
        return sb1.replace(s,e+1,sb2.toString()).toString();
        
        // return my_string.substring(0,s)+sb.toString()+my_string.substring(e+1);
    }
  • replace(int start, int end, String str)
    • 구간을 다른 문자열로 변환하는 함수
  • StringBuilder가 제공하는 메소드를 적극 활용하자.

0개의 댓글