관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch5 - 12 ~ 17 [String배열, String클래스, 커맨드라인 입력받기] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch5 - 12 ~ 17 [String배열, String클래스, 커맨드라인 입력받기]

소소한나구리 2023. 11. 13. 14:10

1) String 배열

  • 여러개의 문자열을 담을 수 있는 배열

(1) String 배열 초기화 방법

 String[] name = new String[3];

// 저장방법1
name[0] = "Kim";
name[1] = "Park";
name[2] = "Yi";

// 저장방법 2
String[] name = {"Kim", "Park", "Yi"};

좌) 간편하게 표현 / 우) 참조형이기 때문에 문자열의 주소가 배열에 입력 됨

 

(2) 실습

  • 랜덤 가위바위보 코드
import java.util.Arrays;

public class ex5_String {
	public static void main(String[] args) {
		// index: 0 ~ 2
		String[] strArr = {"가위", "바위", "보"};
		System.out.println(Arrays.toString(strArr));
	
		int i = 0;
		
		for(; i<10; i++) {
			int tmp = (int)(Math.random()*3);	// 0 ~ 2 까지 랜덤 범위
			System.out.println(strArr[tmp]);
		}
	}
}

2) String 클래스

(1) String 클래스 특징

  • 문자타입 배열(char[])과 메서드(기능)를 결합한 것
  • String 객체가 생성된 이후에는 객체의 내용을 변경할 수 없음 (읽기만 가능) -> String 클래스의 불변성(immutability)
  • String 타입 변수 a에 "a"를 저장하고 b에 "b"를 저장하여 a + b로 변수를 연산하여 a에 저장하면 a의 기존 값인 "a" 가 "ab"로 변경되는게 아니라 "ab"라는 새로운 문자열이 a의 참조변수에 저장되어 출력되는 것임
String a = "a";
String b = "b";

a = a + b; // 문자열 a 와 b가 결합되어 a에 "ab"를 저장시킨다
print(a) // "ab" 출력

// 기존에 저장 되었던 a가 바뀌는 것이 아님
// "ab"라는 새로운 문자열이 새로운 참조변수에 저장되어 출력
// 9장에서 상세하게 배움

 

(2) String클래스의 주요 메서드

  • charAt(int index) : 문자열에서 해당 위치(index)에 있는 문자를 char 타입으로 반환
  • length() : 문자열의 길이를 int타입으로 반환
String str = "ABCDE";

char ch = str.charAt(3);  // 문자열 str의 4번째 문자(인덱스 3번의 문자) 'D'를 ch에 저장
str.length() // 출력결과 5
  • substring(int from, int to) : 문자열에서 해당 범위(from ~ to)의 문자열을 반환하고 to는 포함 되지 않으며 to를 생략하면 끝까지 출력
String str = "012345"

String tmp = str.substring(1,4); // str에서 index값 1~4의 문자들을 반환(4는 포함 안됨)
System.our.println(tmp); // "123"출력
  • equals(Object obj) : 문자열의 내용이 같은지 확인, 같으면 true 다르면 false
  • toCharArray() : 문자열을 문자배열(char[])로 변환해서 반환

(3) 실습

import java.util.Arrays;

public class ex5_StringClass {
	
	public static void main(String[] args) {
		// index번호   01234					
		String str = "ABCDE";
        
		// ()사이에 index 번호를 적으면 해당 문자 반환
		char ch = str.charAt(2);
		
		// from ~ to(to는 포함 안됨), from 부터 to앞의 인덱스번호까지 출력
		// index 번호 1 ~ 3까지의 문자를 반환 (4는미포함)         
		String str2 = str.substring(1,4);

   		// from, from부터 끝까지 출력
		// str.substring(1, str.length())와 의미가 같음 
		String str3 = str.substring(1);
        
		System.out.println(ch);
		System.out.println(str2);
		System.out.println(str3);
		System.out.println(str.length());	// 문자열의 길이 반환
	
	}
	
}

출력값
C
BCD
BCDE
5

3) 커맨드라인 입력받기

  • JVM이 윈도우의 cmd, mac의 터미널, IDE의 Arguments에 입력한 값들을 main 메소드의 매개변수args에 문자열 배열로 전달하여 커맨드라인으로 입력한 값들을 프로그램에서 사용가능
  • 아무 값도 주지 않을 경우 길이가 0인 배열이 됨(null이 아님)
public class ex5_7 {

	public static void main(String[] args) {
		System.out.println("매개변수의 개수:"+args.length);
		for(int i=0; i<args.length; i++) {
			System.out.println("args["+i+"] = \""+args[i]+"\"");
		}
	}
}

 

(1) 터미널에서의 실행 - mac

  • 스페이스바로 문자열 구분 -> abc 123 "Hello World" 이렇게 입력하면 "abc" "123" "Hello World" 이렇게 문자열이 3개 생성됨
  • ""로 여러 단어를 1개의 문자열로 구성가능("Hello World" -> Hello World의 두개의 단어를 "" 묶어서 1개의 문자열로 설정)
  • 이클립스는 alt+엔터를 치면 java 파일의 경로가 나오고 인텔리제이는 main메서드가있는 클래스를 오른쪽 버튼을 누르면 java 파일의 경로를 복사할 수 있음

좌) 인텔리제이 / 우) 이클립스

  • 위에서 확인한 경로에서 상위 폴더로 올라가면 이클립스의 경우 bin, 인텔리제이의 경우 out 디렉토리를 확인할 수 있는데, 해당 디렉토리로 쭉 들어가면 생성한 클래스의 이름으로 class 파일이 존재함
  • 해당 파일의 경로를 복사하여 터미널에서 cd + 복사한 경로를 붙혀넣기 하면 해당 위치로 이동되며 이동된 위치에서 ls 명령어를 검색하면 해당 위치의 파일을 볼 수 있음
  • 명령어를 입력하여 해당 클래스 파일을 실행, java Main(class 파일 이름) 입력할 값들
  • 만약 class 파일의 위치가 아닌 bin이나 out의 위치에서 class 파일에접근할 경우 패키지가 있다면 패키지 경로는 ch5.ex5_7 처럼 '.' 으로 구분하면 됨

커맨드라인 출력 결과

(2) 이클립스에서의 실행

  • Run configurations -> (x)=Arguments탭으로 이동 -> Program argumets 작성 -> run(실행)

 

3개의 문자열 생성 완료

 

** 출처 : 남궁성의 정석코딩_자바의정석