벌써 String클래스의 메소드를 소개하는 세 번째글이다. 바로 본문으로 가보자.
//7. 특정문자열로 시작하는지 여부
System.out.println(s3.startsWith("Hello"));
//7-1. 특정문자열로 끝나는지 여부
System.out.println(s3.endsWith("Hello"));
startsWith()과 endsWith()메소드이다.
이름에서부터 어떤 역할인지 알 것만 같은 메소드들이다. 여기서 사용한 s3는 바로 이전 글에 있었는데, 아래 글을 참고해주면 좋을 것이다.
특정 문자열로 시작하거나 끝나는지 여부를 알려주는 메소드라고 주석에 적었는데
'여부'를 알려준다는 것은 boolean값을 리턴한다는 의미이다.
https://bonustrack02.tistory.com/7
//8. 문자열의 양끝 공백문자를 제거해주는 메소드
String s6 = " Hello ";
System.out.println("[" + s6 + "]");
s6 = s6.trim(); //새로운 객체 생성
System.out.println("[" + s6 + "]");
trim()이라는 메소드를 소개한다. 이 메소드는 문자열의 양 끝 공백문자를 제거해주는 메소드이다.
컴퓨터의 관점이 아닌 사람의 관점에서는 "Hello "나 "Hello"는 같은 것이라고 생각할 수 있지만
컴퓨터의 관점으로는 이 문자열 끝의 공백 또한 문자이다.
사실 trim도 한국어가 아니라 그렇지 영단어 자체의 뜻은 '자르다'이다.
(자바 시스템 라이브러리에 있는) 메소드의 이름은 이렇게 이름만 봐도 무슨 역할인지 대략 예측이 가능하도록 설계되어있다.
(나 같은 초보는 아닐 가능성이 높다)
위 코드의 출력 결과는 어떨까?
[ Hello ]
[Hello]
위와 같을 것이다.
//9. 대소문자 변환
String s7 = s3.toUpperCase();
System.out.println(s7);
String s8 = s3.toLowerCase();
System.out.println(s8);
대소문자로 변환해주는 toUpperCase()와 toLowerCase()를 소개한다.
이 메소드(함수)도 다른 메소드와 비슷한 느낌으로 영단어 그 자체의 뜻이 메소드의 동작과 비슷하다.
대문자는 Capital이라고 배운 사람도 많을 것으로 생각한다. 하지만 upper case라는 단어도 같은 의미이다.
반대로 소문자는 lower case이다.
따라서 toUpperCase()라고 하면 '대문자로' 라는 뜻으로 해석된다.
toLowerCase()의 경우도 마찬가지이다. '소문자로' 라는 뜻으로 해석된다.
그럼 이 메소드는 어떻게 리턴을 해줄까?
위 코드에서는 s3를 모두 대문자로 바꾼 문자열을 s7에 대입하고 s3를 모두 소문자로 바꾼 문자열을 s8에 대입한다.
결과는 아래와 같을 것이다.
HELLO WORLD! HELLO ANDROID! NICE WORLD!NICE ANDROID!
hello world! hello android! nice world!nice android!
//10. 특정문자 바꿔치기
String s9 = s3.replace('H', 'K');
System.out.println(s9);
//10-1. 특정문자열 바꿔치기
String s10 = s4.replace("world", "ios");
System.out.println(s10);
//문자열의 중간 공백을 없애고 싶을 때
System.out.println(s3.replace(" ", ""));
여기서 소개할 메소드(함수)는 바로 replace()이다.
replace는 영단어 뜻이 '교체하다, 대체하다'라는 뜻이다.
그래서 특정 문자나 문자열을 교체하려고 할 때, 이 메소드의 파라미터에 '교체될 녀석, 교체할 녀석'을 넣는다.
그렇게 공백 문자도 빈 문자열로 교체시켜 중간 공백을 없앨 수 있다.
//11. 문자열 잘라내기
String s11 = s3.substring(6);
System.out.println(s11);
String s12 = s3.substring(6, 12); // 6~12전까지 -- 11까지
이번에 소개할 메소드(함수)는 substring()이다.
주석 그대로 문자열을 잘라내는 메소드이다. 잘라낸다는 게 애매할 수 있는데 다른 말로 해당 부분만 삭제한다는 의미이다.
이 코드에서는 s11은 s3에서 6글자를 잘라낸다는 의미이다. 그런데 6글자를 어떻게 잘라낼까?
인덱스 번호순으로 잘라내기 때문에 0번부터 5번까지 6글자를 자른다.
s12는 6번부터 12번사이를 자른다는 의미인데 6번 인덱스부터 11번 인덱스까지 자른다는 의미이다.
int hour = 5, min = 24, sec = 35;
System.out.println(hour + ":" + min + ":" + sec);
System.out.printf("%02d:%02d:%02d\n", hour, min, sec);
String data;
data = String.format("%02d:%02d:%02d", hour, min, sec);
System.out.println(data);
이번에는 조금 더 심화된 내용을 소개해보려한다. 지금까지 소개했던 메소드들은 당연히 객체를 만들고 호출해야 했다.
하지만, 객체를 생성하지 않고도 사용할 수 있는 멤버 메소드(함수)가 있다.
바로 static method들이다. 객체를 생성하지 않고도 클래스명만으로 바로 사용이 가능하다.
대표적인 static 메소드 중 format()이 있다. 이는 C언어의 printf()와 비슷하다.
위 예제 코드는 시간 형식으로 문자열을 출력하려고 하는 상황이다.
우리가 익히 알고 있는 방식으로 출력하는 방식이 위의 3줄이다.
하지만, String클래스의 format() 메소드를 사용하면 printf()와 달리 위에 printf()로 만든 형식을 계속해서 출력할 때 더 용이하다.
또한, 새로운 String으로 만들었기 때문에 하나의 데이터가 된 것이다.
int num = 100;
String sss = String.valueOf(num); //100 --> "100"
System.out.println("숫자의 자리수 : " + sss.length());
sss = String.valueOf(3.14); //3.14 --> "3.14"
System.out.println(sss.length());
이번에는 기본 자료형을 String 객체로 변환해주는 메소드를 소개해본다.
여기서 예제로 사용한 100의 자리수가 궁금하다면 원래 if문을 여러번 사용해
그 숫자가 2자리 수일때, 1자리 수일때도 따로 코딩을 해줘야 한다.
하지만 valueOf()을 사용해 문자열로 변환하고 그 길이를 출력한다면 쉽게 자리수를 찾을 수 있을 것이다.
아쉽게 실수형 숫자의 경우 그 길이를 구하기 힘들다.
사실, 기본형을 문자열로 변환하는 작업은 아주 빈번하다.
그리고 String.valueOf()는 잘 사용되지 않는다. 문자열 결합 연산자 때문이다. 다들 기억하고 있을지 모르겠다.
문자열을 출력할 때 + 연산자를 통해 변수와 문자열을 같이 출력했다.
하지만, 반대로 문자열을 기본형으로 변환하는 경우도 매우 잦다.
이는 특히 GUI환경에서 두드러지는데 사용자의 입력은 무조건 String형으로 받기 때문에
이 값으로 연산을 하기 위해서는 자료형을 바꿔야 한다.
하지만, String은 알다시피 기본 자료형이 아닌 참조 자료형이다.
자바는 참조 자료형을 기본 자료형으로 곧바로 바꿀 수 없다.
String str1234 = "234";
int x = (int)str1234;
이런 식으로는 절대 불가능하다는 말이다.
그럼 자료형을 어떻게 변환해야 할까?
이를 위해 기본 자료형의 이름을 딴 클래스들이 있다. 예를 들면 Integer, Double... 등이 있다.
이런 클래스들을 Wrapper class라고 한다. 그리고 자세히보면 클래스 이름들의 시작은 모두 대문자이다.
프로그래밍은 이런 이름들에 규칙들이 있다.
String x = sc.next(); //문자열 입력
String y = sc.next();
int n1 = Integer.parseInt(x);
int n2 = Integer.parseInt(y);
System.out.println(x + " + " + y + " = " + (n1 + n2));
이 예제는 사용자로부터 두 수를 입력받아 덧셈하는 예제이다.
문자열로 입력을 받았고 이 두 수를 int형으로 변환해 덧셈해야 한다. 이 때, Integer클래스의 static method인 parseInt()이다.
여기서 가끔 아주 창의적인 사람들을 만날 수도 있다. 만약 입력 값이 "abc" 이런 식의 진짜 문자열 입력이 들어온다면 어떻게 될까?
너무 심오하게 생각하는 사람들은 아스키 코드 값을 출력하지 않을까라고 생각하는 사람들도 있을 것이다.
하지만, 답은 단순하다. 그냥 안된다. 에러난다. 숫자 형식이 아니라고 변환해주지 않는다.
오늘 여기까지해서 String 클래스에서 자주 쓰이는 메소드들을 소개해봤다.
다음 글에서는 자바의 배열을 소개해보겠다.
'Language > Java' 카테고리의 다른 글
자바의 클래스 소개 (0) | 2022.03.02 |
---|---|
자바의 배열(Array) (0) | 2022.02.23 |
Java에서의 String 소개 - 2 (0) | 2022.02.11 |
Java에서의 String 소개 - 1 (0) | 2022.02.09 |
Java의 print와 scan (0) | 2022.02.03 |