문자열의 일부분 추출
public class Main { public static void main(String[] args) { String str = "abcdefg"; System.out.println(str.substring(2)); System.out.println(str.substring(2, 4)); } }
戻り値:このオブジェクトのよって表される文字のシーケンスの長さ
문자열의 길이를 표현하는 메소드
반환값으로 문자열의 길이를 int형의 값으로 출력할 수 있다.
문자열의 글자 수와 같은 수의 값이 나오는 경우가 많다.
public class Jsample { public static void main(String[] args) { String msg1 = "Hello"; String msg2 = "東京都港区赤坂"; System.out.println(msg1 + "の長さは" + msg1.length()); System.out.println(msg2 + "の長さは" + msg2.length()); } }
문자열끼리 결합할 때 사용하고, 결합된 문자열은 새로운 문자열으로 메모리에 올린다.
인스턴스를 새로 생성한다.
문자열을 하나 준비하고, 결합하고 싶은 문자열을 매개변수로 주면서 결합.
원래 문자열.concat(결합하고 싶은 문자열);
String 결합한 문자열 = 원래 문자열.concat(결합하고 싶은 문자열);
public class StringConcat { public static void main(String[] args) { String str1 = "Coffee"; String str2 = "Bread"; String str3 = str1.concat(str2); System.out.println(str3); String str4 = "Fresh".concat(str3); System.out.println(str4); } }
public class SampleCharAt { public static void main(String[] args) { String str = "Hello.Java World.Stay Strong"; char ch1 = str.charAt(0); char ch2 = str.charAt(15); char ch3 = str.charAt(20); char ch4 = str.charAt(25); System.out.println("첫 번째 문자: " + ch1); System.out.println("열 다섯번째 문자: " + ch2); System.out.println("스무번째 문자: " + ch3); System.out.println("스물 다섯번째 문자: " + ch4); } }
public class SampleValueOf { public static void main(String[] args) { // short형 > String short sh = 100; String strsh = String.valueOf(sh); System.out.println(strsh); int num = 100; String strnum = String.valueOf(num); System.out.println(strnum); long lon = 100; String strlon = String.valueOf(lon); System.out.println(strlon); float fl = 100; String strfl = String.valueOf(fl); System.out.println(strfl); double db = 100; String strdb = String.valueOf(db); System.out.println(strdb); } }
문자열 또는 숫자의 값을 비교하여, 비교한 값이 어느 쪽이 크거나 같거나를 비교할 수 있다.
변수1.compareTo(변수2)
✔숫자의 비교
단순히 크다(1), 같다(0), 작다(-1)의 관한 결과값을 반환.
✔문자열 비교
같은 문자열의 경우는 숫자와 동일하게 0을 리턴
문자열의 유니코드의 사전적으로 비교.
public class Main {
public static void main(String[] args) {
String str1 = "Lexicographically";
String str2 = "lexicographically";
int cmp;
if (str1.equals(str2))
System.out.println("두 문자열은 같습니다.");
else {
System.out.println("두 문자열은 다릅니다.");
비교는 두 값의 차이(뺄셈)
cmp = str1.compareTo(str2); //cmp=제일 처음 다른 글자의 유니코드로 비교
if (cmp == 0)
System.out.println("두 문자열은 일치합니다");
else if (cmp < 0)
System.out.println("사전 앞에 위치하는 문자: " + str1);
else
System.out.println("사전 뒤에 위치하는 문자: " + str2);
// 음수=대문자인 문자열을 출력 양수=소문자인 문자열을 출력
if (str1.compareToIgnoreCase(str2) == 0)
System.out.println("두 문자는 같습니다");
else
System.out.println("두 문자는 다릅니다.");
}
}
}
package com.global.ex2;
public class Main {
public static void main(String[] args) {
//문자열 "123"이 저장된 인스턴스의 생성
StringBuilder stbuf = new StringBuilder("123");
stbuf.append(45678); // 문자열 덧 붙이기
System.out.println(stbuf.toString());
stbuf.delete(0, 1); // 문자열 일부 삭제
System.out.println(stbuf.toString());
stbuf.replace(0, 3, "AB"); // 문자열 일부 교체
System.out.println(stbuf.toString());
stbuf.reverse(); // 문다열 내용 뒤집기
System.out.println(stbuf.toString());
String sub = stbuf.substring(2, 4); // 일부만 문자열로 반환
System.out.println(sub);
}
}
[결과]
12345678
2345678
AB5678
8765BA
65
✔String 과 StringBuilder 의 차이
String은 선언하면 무조건 메모리에 올라간다.
StringBuilder는 Heap영역에 있는 String constant pool에 저장된다.
안 좋은 예
String str = "0"; for(int i = 0; i <= 1000; i++) { str = str + i; System.out.println(str); }
1000개 인스턴스가 메모리에 올라가서 메모리 낭비
좋은 예
StringBuilder stbf = new StringBuilder("0"); for(int i = 0; i <= 1000; i++) { System.out.println(stbf); }
인스턴스에 저장된 값이 갱신돼서 메모리 절약 할 수 있음.
String str = "age: " + 17;
❌String str = "age: " .concat(17);
⭕️String str = "age: " .concat(String.valueOf(17));
Scanner 클래스의 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미한다.
import java.util.Scanner;
public class ScnnerTest {
public static void main(String[] args) {
String source = "1 3 5"; // 공백 기준으로 num1, num2, num3에 뿌린다.
Scanner sc = new Scanner(source);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
int sum = num1 + num2 + num3;
System.out.printf("%d + %d + %d = %d \n", num1, num2, num3, sum);
}
}
import java.util.Scanner;
public class ScannetTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력:");
String str1 = sc.nextLine();
System.out.println("문자열 입력:");
String str2 = sc.nextLine();
System.out.println(str1);
System.out.println(str2);
}
}
국어, 영어, 수학의 점수와 총점을 Scanner, System.in을 사용해서 출력하는 예제
import java.util.Scanner;
public class ScnnerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner : 입력받는 클래스
//System(클래스 이름).(.은 클래스안에 있는 변수/함수)in = 키보드로 입력한다 >> >
System.out.println("국어:");
int num1 = sc.nextInt();
System.out.println("영어:");
int num2 = sc.nextInt();
System.out.println("수학:");
int num3 = sc.nextInt();
int sum = num1 + num2 + num3;
System.out.println("합계:");
System.out.println(num1 + "+" + num2 + "+" + num3 + "=" + sum);
}
}
Grade클래스를 만들고 국어, 영어, 수학의 점수를 Scanner를 사용해 Console창에서 입력, 그리고 총점과 평균, 학점을 출력.
import java.util.Scanner;
class Grade {
private int kor, eng, math;
public Grade(int kor, int eng, int math) {
this.kor = kor;
this.eng = eng;
this.math = math;
}
public int getSum() {
return (kor + eng + math);
}
public double getAvg() {
return (getSum() / 3.0);
}
public char getGrade() {
char grade = '가';
if (getAvg() > 90) {
grade = '수';
} else if (getAvg() > 80) {
grade = '우';
} else if (getAvg() > 70) {
grade = '미';
} else if (getAvg() > 60) {
grade = '양';
} else {
grade = '가';
}
return grade;
}
}
public class ScannerTest3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("국어: ");
int num1 = sc.nextInt();
System.out.println("영어: ");
int num2 = sc.nextInt();
System.out.println("수학: ");
int num3 = sc.nextInt();
Grade grade = new Grade(num1, num2, num3);
System.out.println("총점: " + grade.getSum());
System.out.println("평균: " + grade.getAvg());
System.out.println("학점: " + grade.getGrade());
}
}