위로 아래

문자열

특징

  1. 문자열은 기본형이 아니라 객체이다
  2. 문자열도 필드와 메소드를 가지고 있다.
  3. 문자열도 힙 메모리에 저장된다 (객체라서)
  4. 문자열은 힙 메모리에 저장된 객체 데이터를 가리키고 있는 참조변수.
  5. 참조변수 (레퍼런스 변수) : 객체를 가리키고 있는 변수

 

묵시적 선언 방식

  1. 내용이 같은 문자열을 묵시적 방식(문자열 리터럴)으로 선언하면, 새로 문자열을 만들지 않고 힙 메모리에 있는 같은 문자열을 동시에 가리킨다.

명시적 선언 방식

  1. 내용이 같은 문자열을 선언해도, 새로 문자열을 만든다.
public class String1Demo {
	public static void main(String[] args) {
		String s1 = "Hi, Java!";   // 묵시적 선언
		String s2 = "Hi, Java!";   // 묵시적 선언
		String s3 = new String("Hi, Java!");   // 명시적 선언
		String s4 = new String("Hi, Java!");   // 명시적 선언
		
		System.out.println(s1==s2);   // 결과 true
		System.out.println(s1==s3);   // 결과 false
		System.out.println(s3==s4);   // 결과 false
		
		s1=s3;
		System.out.println(s1==s3);   // 결과 true
	}
}

 

 


문자열 메소드 목록

s1.compareTo(s2)   // s1
s1.compareToIgnoreCase(s2)   //
s1.equals(s2)   // 문자열 s1과 s2가 같으면 true, 아니면 false 반환
s1.equalsIgnoreCase(s2)   // 대소문자 구분 없이 문자열 s1과 s2가 같으면 true, 아니면 false 반환

s1.charAt(index)   // s1 문자열 중 인덱스 번호 번째 문자를 반환
s1.length()   // s1 문자열의 길이 반환
s1.concat(s2)   // s1문자열과 s2문자열을 이어 붙인다
s1.substring(3,6)   // s1 문자열을 인덱스 3이상 6미만 만큼만 문자열 반환
s1.toLowerCase()   // s1 문자열을 전부 소문자로 변경
s1.toUpperCase()   // s1 문자열을 전부 대문자로 변경

s1.isEmpty()   // 문자열이 아예 비어있으면 true, 아니면 false
s1.isBlank()   // 문자열이 비어 있거나 공백이면 true, 아니면 false
s1.repeat(10)   // s1 문자열을 10번 반복 출력
s1.trim()   // s1 문자열의 빈칸 제거
s1.indexOf("a")   // s1 문자열에서 'a' 문자를 찾아 인덱스 번호를 반환

String.format("%s %d","JDK",14)   // 맨 앞 형식에 맞게 뒤에 애들 끼워넣기 (문자열, 정수형)
String.join("/","a","b","c")   // 맨 앞 문자 /를 뒤에 문자들 사이마다 놓기.  결과 a/b/c

String PI = String.valueOf(3.14)   // 3.14를 알아서 String으로 바꿔서 PI에 넣어라.
int a = Integer.valueOf("57")   // 57을 알아서 int로 바꿔서 a에 넣어라

 

compareTo, compareToIgnoreCase, equals, equalsIgnoreCase 예시

더보기
public class String2Demo {
	public static void main(String[] args) {
		String s1 = "Hi, Java!";   // 대문자
		String s2 = new String("Hi, Java!");
		String s3 = "Hi, Code!";
		String s4 = "hi, java!";   // 소문자
		
		System.out.println(s1.equals(s2));   // 필드(내용)비교. 결과 true
		System.out.println(s1.equals(s3));   // 필드(내용)비교. 결과 false
		System.out.println(s1.equals(s4));   // 필드(내용)비교. 결과 false
		System.out.println(s1.equalsIgnoreCase(s4));   // 대소문자 무시하고 필드(내용)비교. true
		
		System.out.println(s1.compareTo(s3));   // 다른 곳 J-C = 7. 결과 7 
		System.out.println(s1.compareToIgnoreCase(s4));   // 같다. 결과 0
		System.out.println(s3.compareTo(s4));   // 결과 -39 (-가 나온 걸로 보아 s4가 더 크다)
		System.out.println("Hi, Java!".compareToIgnoreCase("hi,java!"));   // 같다. 결과 0
	}
}

 

concat, substring, toLowerCase, toUpperCase, trim, charAt 예시

더보기
public class String3Demo {
	public static void main(String[] agrs) {
		String s1 = new String("Hi,");
		String s2 = new String(" Java");
		
		System.out.println("문자열의 길이(s1) : " + s1.length());   // 결과 3
		System.out.println(s1.charAt(1));   // 결과 i
		
		s1 = s1.concat(s2);
		
		System.out.println(s1.concat(s2)+"!");   // 결과 Hi, Java Java!
		System.out.println(s1.toLowerCase()+"!");   // 결과 hi, java!
		System.out.println(s1.substring(4,8)+"!");   // 결과 Java!
		
		String s3 = "  ";
		System.out.println(s3.isEmpty());   // 결과 false
		System.out.println(s3.isBlank());   // 결과 true
		String s4 = "";
		System.out.println(s4.isEmpty());   // 결과 true
		System.out.println(s4.isBlank());   // 결과 true
		
		String s5 = "*-*";
		System.out.println(s5.repeat(10));   // 결과 *-**-**-**-**-**-**-**-**-**-*
		
		System.out.println(s2.trim().indexOf("v"));   // 결과 2
	}
}

 

 

String.format, String.join, String.valueOf 예시

더보기
public class String5Demo {
	public static void main(String[] args) {
		String version = String.format("%s %d", "JDK", 14);
		System.out.println(version);
		
		String fruits = String.join(", ", "apple","banana","cherry","durian");
		System.out.println(fruits);
		
		String pi = String.valueOf(3.14);
		System.out.println(pi);
		int a = Integer.valueOf("57");
		Boolean.valueOf("true");
	}
}

 

 

가변 개수 매개변수 ...

개수가 정해져 있지 않으면 매개변수에 ...을 쓰면 동적으로 받아들인다.

 

예시

더보기
public class String6Demo {
	public static void main(String[]args) {
		printsum(1,2,3,4,5);
		printsum(10,20,30);
		System.out.println(String.format("My Score is %.1f",99.8));
		System.out.println(String.join(",", "one", "two","three"));
	}
	
	public static void printsum(int ...v) {
		int sum=0;
		for(int i :v) {
			sum += i;
		}
		System.out.println(sum);
	}
}