Java String Array

Java String Array

java

참고서적 : Java의정석 3rd Edition

String은 기본값을 선언하지 않으면 null로 초기화된다.

1
2
3
4
String[] name = new String[3];
name[0] = new String("kim");
name[1] = new String("jo");
name[2] = new String("park");

String 주소구성

위의 그림처럼 참조형 배열의 경우 배열에 저장되는 것은 객체의 주소이다.

java의 자료형(기본 자료형, 참조 자료형)을 알아둬야 한다.

기본 자료형 : 논리형, 문자형, 정수형, 실수형
참조 자료형 : 클래스, 배열, 인터페이스

모든 참조형 변수에는 객체가 메모리에 저장된 주소인 4byte의 정수 값 또는 null이 저장된다.

참조형 배열에 값을 입력해보자.

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 chapter05;

public class ArrayEx12 {

public static void main(String[] args) {
String[] arr = {"Kim", "Jo", "Yi"};
for(int i = 0; i< arr.length; i++) {
System.out.println("arr["+i+"] : "+arr[i]);
}

String tmp = arr[2];
System.out.println("tmp : "+tmp);

arr[2] = "Yu";

for(int i = 0; i< arr.length; i++) {
System.out.println("arr["+i+"] : "+arr[i]);
}

int[] intarr = {1,2,3};
for(int i = 0; i< intarr.length; i++) {
System.out.println("intarr["+i+"] : "+intarr[i]);
}

int intmp = intarr[2];

System.out.println("intarr : "+intmp);
intarr[2] = 4;

for(int i = 0; i< intarr.length; i++) {
System.out.println("intarr["+i+"] : "+intarr[i]);
}

}
}

16진수를 2진수로 변환

16진수이다보니 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 까지 한정되어 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package chapter05;

public class ArrayEx13 {
// 16진수를 2진수로 변환
public static void main(String[] args) {
char[] hex = { '1', 'A', 'B', 'E' };
String[] binary = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010",
"1011", "1100", "1101", "1110", "1111" };

String result = "";

for (int i = 0; i < hex.length; i++) {
if ('0' <= hex[i] && hex[i] <= '9') {
result += binary[hex[i]-'0']+" ";
} else {
result += binary[hex[i]-'A'+10]+" "; // B-A+10 => binary[11] = 1011
}
}
System.out.println(result);
}
}

10진수를 2진수로 변환

입력받는 10진수를 2진수로 변환하여라.

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
package chapter05;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class ArrayEx13_1 {
// 10진수를 2진수로 변환
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

int a = scan.nextInt();
String result = "";

ArrayList<String> arr = new ArrayList();


while (a > 0) {
int re = a%2;
arr.add(Integer.toString(re));
a = a/2;
}
Collections.reverse(arr);
System.out.println(arr.toString());
}
}

char배열과 String클래스

String클래스는 char배열에 여러 가지 메서드를 추가하여 확장한 것이다.
객체지향개념이 나오기 이전의 언어들은 데이터와 기능을 따로 다루었지만, 객제지향언어에서는 서로 관련된 것들끼리 데이터와 메서드를 구분하지 않고 함께 묶는다.

char배열과 String클래스의 차이

String객체는 읽을 수만 있을 뿐 내용을 변경할 수 없다.

1
2
3
String str = "java";
str = str+"8"; // java8 이라는 새로운 문자열이 str에 저장된다.
System.out.println(str) // java8

위의 주석에서 보이듯이 str에 새로운 문자열이 생성되는 것이지 str의 내용이 변경되는 것이 아니다.

StringBuffer클래스는 변경 가능한 문자열을 다룰 수 있다.

char배열과 String클래스의 변환

서로 변환하는 경우가 있다.

1
2
3
char[] chArr = {'A', 'B', 'C'};
String str = new String(chArr); // char배열 -> String
char[] tmp = str.toCharArray(); // String -> char배열

커맨드 라인을 통해 입력받기

프로그램을 실행할 때 클래스 이름 뒤에 공백문자로 구분하여 여러 개의 문자열을 프로그램에 전달 할 수 있다.

1
> java MainArg abc 123

abc, 123 2개의 문자열을 String배열에 담겨서 main의 매개변수(args)로 전달된다.
args[0] = “abc”, args[1] = “123” 로 전달된다.

커맨드 라인은 매개변수를 공백으로 구분하기 때문에 공백이 있을경우 “”로 구분해줘야한다.

그렇다면 우리는 main 영역에 args를 넣지않고 실행하는 경우가 많은데 왜 문제가 없을까?? 그 이유는 JVM이 main 매개변수가 없을때 0인 배열을 생성해 args에 전달하기 때문이다.

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
public class ArrayEx17 {
public static void main(String[] args) {

int num1 = Integer.parseInt(args[0]);
char operator = args[1].charAt(0);
int num2 = Integer.parseInt(args[2]);
int result = 0;

switch (operator) { // operator는 char type임으로 switch 조건식에 사용가능
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
System.out.println("지원하지 않는 형식입니다.");
}
System.out.println("result : "+ result);
}

}

switch문의 제약조건

  1. switch문의 조건식 결과는 정수 또는 문자열이여야 한다.
  2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

jdk 1.7이후로 switch문의 조건문에 문자열이 가능하다.

1
2
3
4
5
6
7
8
9
10
int num, int result;
final int ONE = 1;
swtich(result) {
case '1': // OK, 문자 상수(정수 상수 49와 동일)
case ONE: // OK, 정수 상수
case "YES": // OK, 문자열 상수, JDK 1.7부터 허용
case num: // Error, 변수 불가
case 1.0: // Error, 실수 불가
}

Share