문자열 조작 메서드
임의의 String 값을 설정하겠다,
String s = "I like Java and Python and C.";
String 값의 문자의길이, 문자의 대문자, 소문자 변환을 위해 사용되는 메서드
// 문자열의 길이
System.out.println(s.length()); //29
// 대소문자 변환
System.out.println(s.toUpperCase()); // 대문자로
// 소문자로 변환
System.out.println(s.toLowerCase()); // 소문자로
- 문자열에 대한 길이를 반환하는 메서드는 length() 메서드이다, 이 메서드는 문자열의 글자 수를 반환.
- 문자열을 대문자로 변환하는 메서드는 toUpperCase()이며, 문자열의 모든 문자를 대문자로 바꾼다.
- 문자열을 소문자로 변환하는 메서드는 toLowerCase()이며, 문자열의 모든 문자를 소문자로 바꾼다.
String 값의 포함 관계, 문자 위치를 알기위해 사용되는 메서드
System.out.println(s.contains("Java")); // 포함된다면 true/ 포함되지 않는다면 false
System.out.println(s.contains("C#")); // false
System.out.println(s.indexOf("Java")); // 위치 정보 = 7
System.out.println(s.indexOf("C#")); // 포함되지 않은 위치 정보는 -1
System.out.println(s.indexOf("and")); // 처음 일치하는 위치 정보 (12)
System.out.println(s.lastIndexOf("and")); // 마지막 일치하는 위치 정보 (23)
System.out.println(s.startsWith("I like")); // 이 문자열로 시작하면 true 아니면 false
System.out.println(s.endsWith(".")); // 이 문자열로 끝나면 true 아니면 false
contains(String str): 문자열에 지정된 문자열이 포함되어 있는지 확인하며, 포함되면 true, 그렇지 않으면 false를 반환.
indexOf(String str): 문자열에서 지정된 문자열이 처음으로 나타나는 위치를 반환, 찾지 못하면 -1을 반환.
lastIndexOf(String str): 문자열에서 지정된 문자열이 마지막으로 나타나는 위치를 반환, 찾지 못할 시 -1을 반환
startsWith(String str): 문자열이 지정된 접두사로 시작하는지 확인합니다. 시작하면 true, 그렇지 않으면 false를 반환.
endsWith(String str): 문자열이 지정된 접미사로 끝나는지 확인합니다. 끝나면 true, 그렇지 않으면 false를 반환.
String 값의 문자열 변환, 문자열 결합, 공백 제거를 위한 메서드
System.out.println(s.replace(" and", ",")); // " and"를 ","로 변환
System.out.println(s.substring(7)); // 인덱스 기준 7 부터 출력
System.out.println(s.substring(s.indexOf("Java"))); // Java의 위치 정보를 찾아 그 위치로부터 출력
System.out.println(s.substring(s.indexOf("Java"), s.indexOf(".")));
// Java의 위치 정보 부터 .의 위치 까지 출력
substring은 문자열에서 일부분을 추출하는 메서드이다. 주로 시작 인덱스와 종료 인덱스를 설정하는 식으로 사용이 된다.
String original = "Hello, World!";
String substring = original.substring(7, 12);
System.out.println(substring); // 출력: "World"
substring의 주의할 점은 시작위치 부터 마지막 위치를 지정 시, 마지막 위치는 제외하고 직전에서 멈춘다
String original = "Hello, World!";
String substring = original.substring(0, 5); // 0부터 5까지 (0, 1, 2, 3, 4)
System.out.println(substring); // 출력: "Hello"
문제를 풀면서 자세히 살펴 보겠다.
String identifyiedID = "901231-1234567";
System.out.println(identifyiedID.substring(0, identifyiedID.lastIndexOf("2")));
identifyiedID = "030708-4567890";
System.out.println(identifyiedID.substring(0, identifyiedID.indexOf("5")));
System.out.println(identifyiedID.substring(0,identifyiedID.indexOf("-") +2 ));
답: 901231-1
030708-4
030708-4
다음으로 공백제거를 위한 메서드는 trim을 사용한다.
s = " I love Java. ";
System.out.println(s.trim()); // 앞 뒤 공백 제거
문자열 결합 시 그저 + 를 사용하는 방법과 concat을 사용하는 방법이 있다.
String s1 = "Java";
String s2 = "python";
System.out.println(s1 + s2); // Javapython
System.out.println(s1 + "," + s2); // Java,python
System.out.println(s1.concat(",").concat(s2)); // Java,python
+를 사용하는 것이 보편적이지만 null 과 같은 값이 있을 경우에는 + 사용 시, 오류가 나지만 concat을 사용할 경우 null을 무의 값이 아닌 null이라는 문자열로 받아들여 새로운 문자열을 배출한다.
파일 생성 및 정보 얻어오기
String fileName = "test.txt";
File file = new File(fileName); // 괄호 안에 파일 명이 저장된 변수나, 파일 명 기입
try {
file.createNewFile(); // 파일 생성
if (file.exists()) {
System.out.println("파일 이름 : " + file.getName());
System.out.println("파일 절대 경로 : " + file.getAbsolutePath());
System.out.println("파일 크기 (Byte) : " + file.length());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
File file = new File(fileName); 로 file이라는 객체의 변수명에 들어갈 파일이름을 지정한 뒤, createNewFile 메서드를 사용하여 파일을생성할 수 있다. 이후 위와 같이 getName, getAbsolutePath, length 메서드 등으로 각 정보를 얻어올 수 있다.
문자열 비교
String s1 = "Java";
String s2 = "Python";
System.out.println(s1.equals(s2)); // 문자열 내용이 같으면 true, 다르면 false
System.out.println(s1.equals("Java")); // true
System.out.println(s2.equals("phthon")); // 대소문자를 구분하기에 false
System.out.println(s2.equalsIgnoreCase("python")); // 대소문자 구분 없이 문자열 내용이 같은지 여부 체크
각 문자열의 비교를 위해 equals라는 메서드를 사용하여 각 내용을 비교한 뒤 그에 맞는 결과값을 반환한다. 특히 equals는 대소문자를 구분하기 때문에 이를 무시하려면 equalsIgnoreCase라는 메서드를 사용하면 된다.
하지만 우린 == 로 문자열을 서로 비교한 적이 있다. 그러면 equls와 ==의 차이는 무엇인가?
s1 = "1234";
s2 = "1234";
System.out.println(s1.equals(s2)); // true(내용)
System.out.println(s1 == s2); // true(참조)
s1 = new String("1234");
s2 = new String("1234");
System.out.println(s1.equals(s2)); // true
System.out.println(s1 == s2); // false
답은 ==는 참조된 것을 비교해 보는 것이고 equals() 는 내용이 같은지 비교해보는 것이다.
맨 위의 1234는 s1 과 s2의 변수에 각 각 배정받은 것 같지만 실제로는 1234라는 문자열의 메모리를 s1과 s2가 같은 메모리를 공유하는 것이다. 즉 문자열 리터럴로 1234라는 문자열이 같기에 자바에서 그 메모리를 재활용하여 각 변수에 똑같은 메모리로 배정이 된 것이다.
하지만 new String의 경우에는 new String()을 사용하여 새로운 String 객체를 생성하였다. 두 String 객체는 내용은 동일하지만 서로 다른 메모리 공간에 저장되어 있게 된다 그리하여 ==는 새로운 객체가 아닌 단순 변수 명일 때에는 참조 비교시 같은 메모리이기에 true가 나온 것이지만 각각 new String으로 1234 메모리를 각 각 따로 배정 받을 시에 결과값은 == 의 반환 값이 false가 나오게 된다.
이스케이프 문자
System.out.println("자바가");
System.out.println("너무");
System.out.println("재밌어요");
System.out.println("자바가\n너무\n재밌어요");
/n은 줄바꿈을 의미한다.
System.out.println("해물파전\t9000원");
System.out.println("김치전\t8000원");
System.out.println("부추전\t8000원");
\t는 텝 효과를 준다 -> 줄 간격을 맞춰주는 효과
이러한 이스케이프 문자로 인하여 \ (역슬래시) 사용 시, 이스케이프 문자로 인식이 되어, 경로를 표시할 때 난항을 겪는다.
//System.out.println("C:\Program Files \Java");
// 위의 주석처럼 역스래시(\)를 입력시 이스케이프 문자로 인식되어서 오류가 난다
// 그래서 역슬래시를 표기하고 싶을 때는 \\ 이와 같이 2번 쓴다
System.out.println("C:\\Program Files\\Java");
따음표는 문자의 시작과 끝을 의미하게 되므로, 문자열 안에 따음표를 쓰고 싶을 땐 이스케이프 문자를 활용하면 된다.
// 단비가 "냐옹" 이라고 했어요
// 문자열 사이에 큰 따음표를 넣고 싶을 땐 \"를 쓰면 큰 따움표 효과를 지닌다
System.out.println("단비가 \"냐옹\" 이라고 했어요");
// \' = 작은 따음표
char c = 'A';
c = '\''; // 작은 따음표를 char의 변수로 삼을 때 쓰인다.
'Java' 카테고리의 다른 글
| Java (배열) (1) | 2023.12.31 |
|---|---|
| Java (이중 반복문) (0) | 2023.12.31 |
| Java (각 반복문 종류와 응용) (0) | 2023.12.31 |
| Java (연산자 정리) (1) | 2023.12.30 |
| Java (타입 및 형 변환) (1) | 2023.12.30 |