1. 문자열 연산 


# 저장된 문자열을 자르거나, 붙이거나, 비교하거나 혹은 필요한 문자의 위치를 알아내는 작업


1) 문자열을 다루기 위한 메소드




# 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package stringex;
 
public class StringTest01 {
    public static void main(String[] args) {
 
        String target = "Welcome to Java World";
        
        System.out.println(target.concat(" and workspace"));
        System.out.println(target.substring(11));
        System.out.println(target.substring(1115));
        System.out.println(target.replace('o''O'));
        System.out.println(target.replace("Java""C"));
        System.out.println(target.toLowerCase());
        System.out.println(target.toUpperCase());
        
    }
}
 
# 실행 결과
Welcome to Java World and workspace
Java World
Java
WelcOme tO Java WOrld
Welcome to C World
welcome to java world
WELCOME TO JAVA WORLD
cs

# 설명

Line 8: target 뒤에 " and workspace"를 붙인다.

Line 9: 11번째 인덱스부터 끝까지 출력한다.

Line 10: 11번째부터 15번째까지의 인덱스를 출력한다.

Line 11: 소문자 o를 대문자 O로 바꾸어준다.

Line 12: "Java"를 "C"로 바꿔준다. 

Line 13~14: 각각 소문자와 대문자로 바꿔준다.




2. 문자열 비교 


1) == 연산자: 기본형 데이터를 비교할 때와 마찬가지로 쓰이지만, 변수의 데이터가 저장된 메모리 위치를 서로 비교한다.

즉, JVM 메모리에 저장된 데이터(객체)를 직접 비교하는 것


2) equals(): 순수 객체의 데이터값끼리를 비교한다. 

3) compareTo(): 사전적 위치를 나타내는 것일 뿐, 결과로 나오는 값의 절댓값을 이용해서 문자열이 사전적으로 얼마나 벌어져 있는지 확인하는 용도로 사용해서는 안된다.


# 문자열을 비교하기 위한 메소드




# 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package stringex;
 
public class StringTest02 {
    public static void main(String[] args) {
 
        String coffee1 = new String("Americano");
        String coffee2 = new String("Americano");
        String coffee3 = new String("AmeRicAnO");
        String coffee4 = new String("Blue mountin");
        String coffee5 = new String("Cappuccino");
        
        System.out.println((coffee1 == coffee2) ? "equal" : "not equal");
        System.out.println((coffee1.equals(coffee2)) ? "equal" : "not equal");
        
        System.out.println((coffee1.equals(coffee3)) ? "equal" : "not equal");
        System.out.println((coffee1.equalsIgnoreCase(coffee3)) ? "equal" : "not equal");
        
        System.out.println(coffee4.compareTo(coffee3));
        System.out.println(coffee4.compareToIgnoreCase(coffee5));
        System.out.println(coffee5.endsWith("A"));
        System.out.println(coffee5.endsWith("o"));
        System.out.println(coffee5.startsWith("Ca"));
        
    }
}
 
# 실행 결과
not equal
equal
not equal
equal
1
-1
false
true
true
cs

# 설명

Line 12: == 연산자로 비교했기 때문에 객체의 주소값이 다르므로 false

Line 13: equals() 메소드로 비교했기 때문에 데이터 값이 같으므로 true

Line 18: coffee4의 B는 coffee3의 A보다 사전적 위치로 뒤에 있기 때문에 양수 1 

Line 19: coffee4의 B는 coffee5의 C보다 사전적 위치로 앞에 있기 때문에 음수 -1 




3. 특정 문자열의 위치 파악


# 대상 문자열에서 특정 문자의 위치값을 나타내는 index를 알기 위한 메소드 



# 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package stringex;
 
import java.util.Scanner;
 
public class StringTest03 {
    public static void main(String[] args) {
 
        String alphabet = "abcdefghijklmnopqrstuvwxyz";
        String number = "1234567890";
        
        System.out.print("문자나 숫자를 입력하세요: ");
        Scanner sc = new Scanner(System.in);
        
        String str = sc.next();
        String temp = str.toLowerCase();
        
        int alphabetIdx = alphabet.indexOf(temp);
        int numberIdx = number.lastIndexOf(temp);
        
        System.out.println("Input character: " + str);
        System.out.println("Alphabet? : " + ((alphabetIdx >= 0) ? "true" : "false"));
        System.out.println("Number? : " + ((numberIdx >= 0) ? "true" : "false"));
        
    }
}
 
# 실행 결과
문자나 숫자를 입력하세요: 6
Input character: 6
Alphabet? : false
Number? : true
 
문자나 숫자를 입력하세요: f
Input character: f
Alphabet? : true
Number? : false
cs

# 설명 

- indexOf(String s)의 결과값으로 음수면 대상 문자열에서 String s는 존재하지 않는 것이고, 양수면 존재하는 것이다. 

Line 17~18: 각 문자열 변수들의 해당 index를 저장하게 된다. 




4. 문자열로 형 변환하는 법


# valueOf(): 다양한 데이터들을 문자열로 바꿔주는 형 변환 함수 



# 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package stringex;
 
public class StringTest04 {
    public static void main(String[] args) {
 
        float f = 10.2031F;
        String temp = String.valueOf(f);
        
        System.out.println(temp);
        System.out.println(temp.concat(" is String!"));
        
    }
}
 
# 실행 결과
10.2031
10.2031 is String!
cs

# 설명

- float형인 변수를 valueOf()를 통해 문자열로 형 변환한다.




5. 특정 형식으로 문자열 포매팅하는 법


# 문자열 포매팅: 문자열의 형태를 정해진 문법에 의해서 변환하는 것 



1) 포맷 지시자


# 대상 문자열을 어떤 형식(포맷)으로 변환하도록 기호로 지정하는 역할 



(1) 인자 번호: format() 메소드에서 포매팅할 대상 문자열의 인자 번호를 의미 

ex. format("%04d", 12, 13); 일때, 12의 인자 번호는 1, 13의 인자 번호는 2가 된다.

이때, 인자 번호 다음에는 반드시 인자 번호를 의미하는 '$' 문자를 붙여야 한다.


(2) 플래그: 숫자를 정렬하거나 특수한 옵션을 지정한다. 결과값을 왼쪽 정렬하는 '-'가 플래그로 가장 많이 사용된다.


(3) 너비: 포매팅할 대상의 너비를 지정한다. 너비는 결과값의 너비를 결정한다. 

'04'로 한다면 네 자릿수에 빈칸은 0으로 채워지게 된다. 

'4'로 한다면 0대신 빈칸으로 채워지게 된다. 


(4) 정밀도: 소수점 아래에 대한 정밀도를 지정하며 대상이 float형인 경우에만 사용한다. 


(5) 유형: 포매팅할 유형을 의미한다. 

* 10진수: %d,    16진수: %x,    부동 소수점: %f,    문자: %c,    문자열: %s



# 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package stringex;
 
public class StringTest05 {
    public static void main(String[] args) {
 
        System.out.println("자릿수 맞추는 format");
        System.out.println(String.format("%04d"3));
        System.out.println(String.format("%04d"30));
        System.out.println(String.format("%04d"3000));
        System.out.println(String.format("%4d"30));
        
        System.out.println("\n돈과 관련된 유용한 format");
        System.out.println(String.format("%,d"10000000));
        System.out.println(String.format("%,.2f", 10000000F));
        
        System.out.println("\n문자열 자릿수 맞추는데 유용한 format");
        System.out.println(String.format("%10s""abcde"));
        System.out.println(String.format("%10s""abcdefghijklmnopqrstuvwxyz"));
        
        System.out.println("\n부동 소수점에 대한 유용한 format");
        System.out.println(String.format("%.2f"12345.12345));
        System.out.println(String.format("%.2f"12.1));
        
    }
}
 
# 실행 결과 
자릿수 맞추는 format
0003
0030
3000
  30
 
돈과 관련된 유용한 format
10,000,000
10,000,000.00
 
문자열 자릿수 맞추는데 유용한 format
     abcde
abcdefghijklmnopqrstuvwxyz
 
부동 소수점에 대한 유용한 format
12345.12
12.1
cs