자바 문자열 괄호 제거 - jaba munjayeol gwalho jegeo

설명

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.

입력

첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

출력

남은 문자만 출력한다.

예시 입력 1 

(A(BC)D)EF(G(H)(IJ)K)LM(N)

예시 출력 1

EFLM


내 풀이



import java.util.*;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
     	String str = in.next();
        Stack<Character> stack = new Stack<>();
        String answer = "";

        for(char ch : str.toCharArray()){
            if(ch == '('){
                stack.push(ch);
            }else if(ch == ')'){
                stack.pop();
            }else{
                if(stack.isEmpty()){
                    answer += ch;
                }
            }
        }

        System.out.println(answer);
  }
}

다른 풀이

import java.util.*;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    
    	String str = in.next();
        Stack<Character> stack = new Stack<>();
        String answer = "";

        for(char ch : str.toCharArray()){
            if(ch == ')'){
                while(stack.pop() != '(');
            }else{
                stack.push(ch);
            }
        }

        for(char ch : stack){
            answer += ch;
        }
    System.out.println( answer);
  }
}



대문 제작: imrahelk

자바 문자열 괄호 제거 - jaba munjayeol gwalho jegeo

서버로부터 받은 충전 상품 이름의 뒤에 괄호가 포함된 금액이 있는데요. 이거를 앱에서 보이지 말고 지워달라는 요청을 받았습니다. 이게 제 서버 가 아닌 다른 서버에서 가져오는 것이기 때문에 제가 할 수 있는 것은 괄호와 금액을 지우는 것입니다. 예를 들면,

포션(10,000)

포션

으로 바꾸는 거죠. 이거는 정규식을 활용하면 쉽게 처리할 수 있습니다.

괄호와 내용을 포함한 부분 문자열 식별

"\\(.*\\)"

괄호와 내용을 포함한 부분 문자열 없애기

String 클래스의 replaceAll 메소드를 활용하면 가능합니다.

String itemName = "포션(10,000)";
String shortItemName = itemName.replaceAll("\\(.*\\)", "");

System.out.println("본 아이템 이름: " + itemName);
System.out.println("줄인 아이템 이름: " + shortItemName);

자바 문자열 괄호 제거 - jaba munjayeol gwalho jegeo

자바 문자열 괄호 제거 - jaba munjayeol gwalho jegeo

replaceAll은 쓸때마다 참 헷갈리는 것같다..

기본적으로 알아야할 것은

str.replaceAll("[{바꾸고싶은 문자의 정규식}]", "{치환할 문자}");

이렇게 사용하는데 정규식이 아주 헷갈리고 쓰기 어려울 때가 있다

표와 예시를 참고해서 사용하면 짱짱 이해잘됨!!!

🛫 정규식 표

정규식 의미 예시
0-9 모든 숫자 str.replaceAll("[0-9]","*");
^0-9 숫자 빼고 모든 문자 str.replaceAll("[^0-9]","*");
a-z 영어 소문자 str.replaceAll("[a-z]","*");
A-Z 영어 대문자 str.replaceAll("[A-Z]","*")
\uAC00-\uD7A3 모든 한글 음절(가-힣) str.replaceAll("[\uAC00-\uD7A3]","*");
\\s 띄어쓰기 str.replaceAll("[\\s]","*");

1. 한글, 숫자, 영문, 띄어쓰기 빼고 = 모든 특수문자 제거

public static String StringReplace(String str){       
    String match = "[^\uAC00-\uD7A30-9a-zA-Z]";
    str = str.replaceAll(match, " ");
    return str;
}

2. 숫자 빼고 전부 제거

public static String StringReplace(String str){       
    String match = "[^0-9]";
    str = str.replaceAll(match, " ");
    return str;
}