* String.split 메소드 정규표현식 이용하여 자르기
Java에서 String을 특정 구분자로 잘라야 할 때 보통 split 메소드를 많이 쓰는데 그에 대한 예제이다.
문자열 중에서 공백을 포함한 특수문자가 들어간 문자열은 모두 쪼개는 코드이다.
처음 문제를 풀 땐 어떻게 해서든 답을 맞춰야 하기 때문에,
아래와 같이 정규표현식에 특수문자를 일일이 지정해주고 쪼갠 후에 비어있는 배열의 값을 체크하여 전체 배열의 길이에서 빼는 임시 방편으로 땜빵(?)하는 모습이다.
빈 문자열 객체나 공백만 있는 문자열은 카운팅하지 않는 것이 문제의 조건이었다.
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
// Write your code here.
String[] arr = s.split("[\\s!,?._'@]");
int n = 0;
for(String t : arr){
if(t.isEmpty())
n++;
continue;
}
System.out.println(arr.length-n);
for(String t : arr){
if(t.isEmpty())
continue;
System.out.println(t);
}
scan.close();
}
}
동일한 내용의 코드를 개선시킨 버전이다.
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine().trim();
// Write your code here.
String[] arr = s.split("[^\\p{Alpha}]+");
int size = s.isEmpty() ? 0 : arr.length;
System.out.println(size);
for(String t : arr){
if(t.isEmpty())
continue;
System.out.println(t);
}
scan.close();
}
}
정규표현식 부분을 아래와 같이 바꾸는 것이 가독성에 더 좋을 것이다.
문자가 아닌 것은 특수문자와 공백이다.
String[] arr = s.split("[^\\p{Alpha}]+");
또한 삼항 연산자를 이용하여 본래 문자열이 그냥 "" 라면 0을 대입한다.
s = "" (빈문자열) 을 위의 조건으로 split을 하게 되면 s는 그 어떤 것으로도 쪼개지지가 않기 때문에 그 자체가 arr에 들어가게 된다.
arr 배열은 {""} 가 되고, length가 1이 되므로 빈 문자열은 계산에서 빼기 위하여 삼항연산자로 s가 빈문자열 일 때의 처리를 해준 것이다.
댓글 없음:
댓글 쓰기