티스토리 뷰

 

String 객체를 활용한 문자열 다루기를 알아보자.

 

1. 사용방법

1) 문자열 정의하기 : 따옴표를 활용 => String 변수이름 = "저장할 문자열";

2) 문자열의 길이 측정 : length() method를 활용 => int len = 변수이름.length();

3) 배열에 저장 : n개의 문자열을 저장할 배열(n의 type은 int) : String[] st_array = new String[n];

 

2. 문자열 다루기

1) 문자열의 비교

a) 문자열이 같은지를 비교=> equals() method를 활용

a.equals(b)를 활용하면 문자열 a와 문자열 b를 비교해 값이 일치한다면? True 아니라면? False를 출력. boolean값

[예시를 통해 확인해보자]

코드설명 : who에 Scanner를 활용해 입력받은 문자열을 s1이라는 객체에 저장된 personName 메소드를 통해 반환받은 문자열과 비교해서 같다면 s1.getGPA() 메소드를 사용해 이름을 프린트하는 코드

이때, s1.personName.equals(who)를 사용한것처럼 문자열을 서로 비교할 수 있다.

 

% 단, a 값이 null값이라면 NullPointerException error 발생. /  b값이 null이라면 false를 반환.

https://offbyone.tistory.com/401를 참고.

 

b) 문자열의 우선 순위 비교(사전순)

=> compareTo() method를 활용해 사전순으로 먼저있다면 True, 아니라면 False를 반환.

 

2) 배열과 문자열

a) 문자열을 받아 공백을 기준으로 분할하여 배열에 저장하고 싶은 경우

=> 문자열.split(" ")을 활용하여 문자열에 받아놓을 수 있다.

% [주의] 이때, length를 사용할때 주의해야함. => 문자열의 길이를 잴 때는 a.lenght()/ 배열일 경우 a.lenght

b) 배열에 저장된 문자열에서 특정 문자를 뽑아내고 싶을 때

=> charAT(int index)를 활용해 특정 문자열중 특정 index값을 가진 문자를 뽑아낼 수 있음.

 

3) 대문자와 소문자.

a) 모든 것을 대문자로 변환.

=> String toUpperCase()

b) 모든 것을 소문자로 변환.

=> String toLowerCase()

 

4)문자열 바꾸기

특정 문자열을 원하는 문자열로 바꾸고 싶을때

=> String replace(CharSequence target, CharSequence replacement)로 target을 replacement로 바꾸기.

 


백준 1316번을 풀면서 문자열을 익혀보자.

package baekjoon;

import java.util.Scanner;

public class group_number_1316 {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int cnt=0;
		
		String[] st = new String[n];
		
		for(int i=0; i<n; i++) {
			
			st[i] = sc.next();//next의 default값은 string => int나 double로 change가능
		}
		
		for(int i=0; i<n; i++) {
			if(st[i].length()==1) {
				cnt++;
				continue;
			}
			int [] check = new int[26];
			check[(int)st[i].charAt(0)-97]=1;
			for(int j=1; j<st[i].length(); j++) {
				int c = st[i].charAt(j);
				
				if(check[c-97]!=0 && st[i].charAt(j-1)!=st[i].charAt(j)) {
					break;
				}
				else {
					check[c-97]+=1;
					if(j==st[i].length()-1) {
						cnt++;
					}
				}
				
			}
		}
		
		System.out.print(cnt);
		sc.close();
	}

}

[코드설명]

- 소문자만 입력받기때문에 아스키코드를 활용 => 길이가 26인(소문자 알파벳개수) check배열을 생성.

- 입력받은 수만큼의 String 배열을 만들어 저장하고 for문을 돌면서 String배열에 저장된 문자열을 하나씩 꺼냄.[i활용]

- i번째 문자열에서 문자 하나씩 접근하기 위해서 charAt을 활용하고 [j]를 활용해서 index를 통해서 문자로 접근.

- 특정 문자열의 문자에 차례대로 j를 활용해 접근하며 check배열에 -97을 활용해 특정문자가 나올때마다 +1을 해주고 만약 check배열값이 0이 아닐경우 이전에 나왔다는것임. => 이전에 나왔으면서 직전에 해당 문자가 없었다면 1316번의 조건에 맞지 않으니 break함.=> 다른경우라면, cnt+1을 해줌으로써 원하는 문자열의 개수를 찾아내줌.

'모바일소프트웨어 > 자바' 카테고리의 다른 글

Generic class  (0) 2021.10.19
자바에서의 객체 비교  (0) 2021.10.16
Static변수와 객체생성의 관계  (0) 2021.10.01
java 변수  (0) 2021.09.28
객체와 클래스(Java Objects and Class)  (0) 2021.09.15