Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 변수명명규칙
- 기타제어자
- 변수의 초기화
- SQL
- 프로그래머스
- 자바실행방법
- 겟셋함수
- 자바제어문
- 자바자료형
- 클래스배열
- 자바별찍기
- 자바수우미양가
- 누승재귀
- 자바함수
- 자바기타제어자
- 연산자우선순위
- 자바switch문
- 팩토리얼재귀
- 오라클
- 자바if문
- 중첩for문
- 반복문라벨
- 효율적인연산
- read()함수
- 자바형식
- 자바상수
- 오버로딩
- 자바클래스
- 자바연산자
- 자바접근지정자
Archives
- Today
- Total
h-i-s-t-o-r-y
[Java] String 클래스 - 문자열 관련 메서드들 정리 본문
/*
1. 얕은복사( shallow clone )과 깊은복사( deep clone ) 개념 설명하세요.
참조하고 있는 객체가 복사되지 않으면 얕은 복사,
참조하고 있는 객체도 복사되면 깊은 복사
2-1. 클래스로더(ClassLoader) 란?
Class객체를 생성하고 클래스파일을 메모리에 동적으로 로드하는 역할
2-2. Class 객체란?
그 클래스의 모든 정보를 담고 있는 객체이다. 클래스당 하나만 존재한다.
2-3. Class 객체를 얻는 2가지 방법
ㄱ.객체명.getClass() 메서드
ㄴ. Class.forName(클래스명)
3. String 클래스의 가장 큰 특징은 ?
* 변경이 불가능하다.
값이 변경되는 게 아니라 새로 만들어진 객체를 참조하는 것
days21.Ex04
4. String 클래스 대신에 StringBuffer와 StringBuilder 클래스를 사용하는 경우는?
String 클래스가 변경이 불가능하기 때문에
문자열을 수정,삭제,추가 하는 작업들을 하고자 할 때
StringBuffer, StringBuilder를 사용한다.
days21.Ex05_02
5. StringBuffer와 StringBuilder 클래스의 차이점은 ?
StringBuffer는 동기화 되어 있다. 멀티 쓰레드에 안전하다.
동기화 처리 여부 예.화장실 있는 사람이 쓰고(잠금) 나와야지 사용할 수 있는 것
6. 아래 코딩에 대해서 각 라인별 주석(설명)을 적으세요.
p.472 문자 인코딩 변환
byte[] utf8Arr = "가".getBytes("UTF-8"); //문자열을 UTF-8로 변환
for (byte b : utf8Arr) {
System.out.println(b); //
}
String str = new String(utf8Arr, "UTF-8"); //byte배열을 문자열로 변환
7. 아래 경로 path 변수에서 확장자명과 파일명을 분리해서 출력하세요.
String path ="c:\\test\\sample\\sample.html";
String fileName, ext ;// 파일명과 확장자명을 저장할 변수
[풀이]
String path = "c:\\test\\sample\\sample.html";
String fileName, ext ;// 파일명과 확장자명을 저장할 변수
// sample html
int idx = path.lastIndexOf("\\") + 1;
System.out.println(path.substring(idx));
String [] datas = path.substring(idx).split("\\.");
fileName = datas[0];
ext = datas[1];
System.out.println(fileName);
System.out.println(ext);
// regex 정규표현식
// "".split(regex);
// \d [0-9]
// \D [^0-9] 0~9까지 숫자를 ^제외한^
// . 모든 문자
// \. 문자 점(.)
8. String msg = "System.out.println( 총페이지수 )";
[풀이]
String msg = "System.out.println( 총페이지수 )";
StringBuffer sb = new StringBuffer(msg);
// ㄱ. println 문자열을 print 문자열로 변경하기
int start = sb.indexOf("println");
int end = start + "println".length();
sb.replace(start, end, "print");
System.out.println(sb);
// ㄴ. 총페이지수 앞 뒤에 "" 쌍따옴표 삽입하기
int offset = sb.indexOf("총페이지수");
sb.insert(offset, '"');
offset += "총페이지수".length() + 1;
sb.insert(offset, '"');
System.out.println(sb);
// ㄷ. 문자열 맨 뒤에 ;(세미콜론) 붙이기
sb.append(";");
sb.insert(sb.length(), ";");
System.out.println(sb);
// ㄹ. 총페이지수 의 총 한 문자 삭제하기.
// sb.setCharAt(index, ch);
sb.deleteCharAt(sb.indexOf("총페이지수"));
System.out.println(sb);
ㄱ. println 문자열을 print 문자열로 변경하기
msg = msg.replace("println", "print");
ㄴ. 총페이지수 앞 뒤에 "" 쌍따옴표 삽입하기
int idx = msg.indexOf("총");
int len = msg.length();
System.out.println(msg.substring(0, idx) + "\"" +
msg.substring(idx, idx+5) + "\"" + msg.substring(idx+5, len));
// msg = msg.replace("총페이지수", "\"총페이지수\"");
ㄷ. 문자열 맨 뒤에 ;(세미콜론) 붙이기
msg = msg.concat(";");
ㄹ. 총페이지수 의 총 한 문자 삭제하기.
int idx = msg.indexOf("총");
int len = msg.length();
System.out.println(msg.substring(0, idx) + msg.substring(idx+1, len));
// msg = msg.replace("총페이지수", "페이지수");
// msg = msg.replace("총", ""); //모든 총이 사라짐 주의
9. String [] arr = { "dog,cat,bear" }
위의 배열의 각 요소를 얻어와서 아래와 같이 출력하기
[결과]
<ol>
<li>dog</li>
<li>cat</li>
<li>bear</li>
</ol>
String [] arr = { "dog,cat,bear" };
String str = arr[0];
String [] sArr = str.split(",");
CharSequence prefix = "<ol>\n\t<li>";
CharSequence delimiter = "</li>\n\t<li>";
CharSequence suffix = "</li>\n</ol>";
StringJoiner sj = new StringJoiner(delimiter, prefix, suffix);
for (String s : sArr) {
sj.add(s);
}
System.out.println(sj);
10. 전체 코딩을 하세요.
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.
예를들어 n이 4이면 "수박수박"을 리턴하고
3이라면 "수박수"를 리턴하면 됩니다.
제한 조건
n은 길이 10,000이하인 자연수입니다.
입출력 예
n return
3 "수박수"
4 "수박수박"
*** StringBuilder 클래스
public static String solution(int n) {
StringBuilder sb = new StringBuilder("");
int quot = n / 2;
int rmd = n % 2;
for (int i = 1; i <= quot; i++) {
sb.append("수박");
}
if (rmd == 1) sb.append("수");
return new String(sb);
}
11. double money = 1234567.1234
위의 머니를 소수점은 2자리 까지 출력하고
세 자리마다 콤마(,)를 찍어서 출력하세요.
[출력]
1,234,567.12
double money = 1234567.1234;
String s = String.format("%,.2f", money);
System.out.println(s);
//형식화 클래스
String pattern = "#,###.00";
DecimalFormat df = new DecimalFormat(pattern);
String data = df.format(money);
System.out.println(data);
12. String data = "강현구, 권희준, 김나린, 김민희";
위의 코딩을 StringTokenizer를 사용해서
아래와 같이 출력하세요.
[출력]
강현구
권희준
김나린
김민희
String data = "강현구, 권희준, 김나린, 김민희";
StringTokenizer st = new StringTokenizer(data);
for (int i = 0; i < 4; i++) {
System.out.println(st.nextToken(", "));
}
String datas = "강현구, 권희준, 김나린, 김민희";
StringTokenizer st = new StringTokenizer(datas,", ");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
*/
package days21;
public class Ex04 {
public static void main(String[] args) {
// 문자열 다루는 클래스 - [String클래스]
// 업캐스팅: CharSequence cseq = new String("홍길동");
// String은 char타입의 배열 형태
// 1. *** String클래스는 변경 불가능한 클래스이다. *** (가장큰특징)
// String a = new String(); (X)
String a = "a"; // == new String("a");
String b = "a";
// ** a의 값을 바꾸는 게 아니라 새로운 인스턴스(ab)의 주소값을 a에 참조
a = a + b;
//같은 주소값을 참조한다는 거..
System.out.println(a == b); //true
System.out.println(a.equals(b)); //true
// 그래서 1번의 이유로..
// 2. 문자열 간 결합/추출/수정 등의 문자열을 다루고자 할 때는
// String클래스 대신 StringBuffer/StringBuilder클래스를 사용한다.
}//main
}//class
package days21;
public class Ex04_02 {
public static void main(String[] args) {
// p.466
String a = new String("a");
String b = new String("a");
System.out.println(a == b); //false 다른객체참조
System.out.println(a.equals(b)); //true 오버라이딩 된거라고 생각
// 빈 문자열 (empty String)
String s = "";
// char [] s = new char[0]; 이거 가능하다는 얘기
// String s = null; 참조하고 있는게 없다는 의미 (구별)
// 빈 문자
char c = ' '; //기본 초기화 (''가 아님)
// char c = '\u0000' 널문자
}
}
package days21;
import java.text.DecimalFormat;
import java.util.Arrays;
public class Ex05 {
public static void main(String[] args) {
String msg = "hi hello world~";
/*
// 1. 문자열 길이
System.out.println(msg.length()); //12
*/
/*
// 2. charAt(index)
for (int i = 0; i < msg.length(); i++) {
System.out.println(msg.charAt(i));
}
*/
/*
// 3. split()
String regex = " ";
//String [] result = msg.split(regex);
String [] result = msg.split(regex, 2); //limit-원래 더잘려도 2개까지만 자름
System.out.println(Arrays.toString(result));
*/
/*
// 4.
int beginIndex = 5;
//System.out.println(msg.substring(beginIndex));
int endIndex = 10;
System.out.println(msg.substring(beginIndex, endIndex));
*/
/*
// 5. String <-> char [] 변환
char [] msgs = msg.toCharArray();
String s = new String(msgs);
*/
/*
// 6. 0~100 정수 입력 (입력 유효성검사)
String kor = "89";
String rgx = "100|[1-9]?[0-9]";
kor.matches(rgx); //true/false
*/
/*
// 7. *** String.join() ***
String [] msgs1 = msg.split(" ");
System.out.println(String.join("//", msgs1));
// hi//hello//world~
*/
/*
// 8. String.format()
int no = 2;
// 0002 4자리의 숫자형식의 문자열로 저장/출력하고 싶다
System.out.println(String.format("%04d", no));
// 0 : 10진수 (값이 없을때 0)
String pattern = "0000";
DecimalFormat df = new DecimalFormat(pattern);
System.out.println(df.format(no));
*/
/*
// 문제
int money = 12345678;
// 12,345,678 천자리마다 콤마 출력
System.out.println(String.format("%,d", money));
// p.540 DecimalFormat
// 형식화클래스 중에서 숫자를 형식화하는 클래스
// # : 10진수
// \u00A4 : 통화기호
// ₩12,345,678
String pattern = "\u00A4#,###";
DecimalFormat df = new DecimalFormat(pattern);
System.out.println(df.format(money));
*/
}
}
package days21;
public class Ex05_02 {
public static void main(String[] args) {
String msg = "hello world~";
// 9. 대소문자 변환 메서드
// System.out.println(msg.toUpperCase());
// System.out.println(msg.toLowerCase());
// 10. indexOf() lastIndexOf()
// int idx = msg.indexOf("wo");
// int idx = msg.lastIndexOf("wo");
// System.out.println(idx); //6
// 11. replace()
// System.out.println(msg.replace('l', 'x')); //hexxo worxd~
// System.out.println(msg.replace("hello", "hi")); //hi world~
//msg.replaceAll(정규표현식, replacement)
//msg.replaceFirst(정규표현식, replacement)
// System.out.println(msg.replaceFirst("hello", "XXX"));
// 12. concat() 문자열 연결 메서드
// "hi".concat("world"); //hiworld
// System.out.println("hi".concat("world"));
// 13. trim()
// 14. contains() - boolean
// System.out.println(msg.contains("hello")); //true
// 15. valueOf() 어떤 자료형이든 String 변환
// System.out.println(String.valueOf(4));
// System.out.println(String.valueOf(true));
// System.out.println(String.valueOf(3.14));
// System.out.println(String.valueOf('a'));
// 16. startsWith() endsWith()
// String url1 = "www.naver.go.kr";
// String url2 = "http://www.naver.com";
// url 문자열이 http:// 로 시작하니 ?
// String prefix = "http://"; //접두사
// System.out.println(url1.startsWith(prefix)); //false
// System.out.println(url2.startsWith(prefix)); //true
// url 문자열이 .com 으로 끝나니 ?
// String suffix = ".com"; //접미사
// System.out.println(url1.endsWith(suffix)); //false
// System.out.println(url2.endsWith(suffix)); //true
}
}
package days21;
import java.io.File;
public class Ex05_03 {
public static void main(String[] args) {
// 17. compareTo() 두 문자열 비교 메서드 - 같으면0, 부호나와서 앞뒤문자 구별가능
System.out.println("kenik".compareTo("keNIk")); //32
System.out.println("keNIk".compareTo("kenik")); //-32
// equals() true/false
System.out.println("kenik".equals("keNIk")); //false
System.out.println("kenik".toUpperCase().equals("keNIk".toUpperCase())); //true
// 대소문자 구분 X
System.out.println("kenik".equalsIgnoreCase("keNIk")); //true
//
String dir = "C:\\test\\sample";
String fileName = "test.java";
System.out.println(File.separator); // "\"
System.out.println(File.separatorChar); // '\'
System.out.println(File.pathSeparator); // ";"
String path = null;
//char endChar = dir.charAt(dir.length()-1)
//String endStr = dir.substring(dir.length()-1)
if (dir.endsWith(File.separator)) {
path = dir.concat(fileName);
} else {
path = dir.concat(File.separator).concat(fileName);
}
// C:\test\sample\test.java
System.out.println(path);
}
}
package days21;
import java.util.StringJoiner;
public class Ex05_04 {
public static void main(String[] args) {
// StringJoiner 클래스 *기억*
String [] arr = "dog,cat,bear".split(",");
CharSequence delimiter = "</li><li>";
CharSequence prefix = "<ol><li>";
CharSequence suffix = "</li></ol>";
StringJoiner sj = new StringJoiner(delimiter, prefix, suffix);
for (String s : arr) {
sj.add(s);
}
System.out.println(sj);
}
}
package days21;
public class Ex06_02 {
public static void main(String[] args) {
String s = "100Akeniktrue";
/*
// kenik앞에 XXX삽입
int idx = s.indexOf("kenik");
// 100AXXXkeniktrue
System.out.println(s.substring(0, idx) + "XXX" + s.substring(idx));
*/
/*
// kenik문자열 제거, XXX수정, YYY삽입
// s.contains("kenik") t/f 리턴 어디 위치에 있는진 몰라
int idx = s.indexOf("kenik");
System.out.println(s.substring(0, idx));
idx += "kenik".length();
System.out.println(s.substring(idx));
// 100Atrue
System.out.println(s.substring(0, s.indexOf("kenik")) + s.substring(idx));
*/
//
StringBuffer sb = new StringBuffer(3); //자동으로 크기 증가됨
sb.append(100);
sb.append('A');
sb.append("kenik");
sb.append(true);
System.out.println(sb.toString());
/*
// sb.deleteCharAt(index)
// 100Akeniktrue -> 100Atrue
int start = sb.indexOf("kenik");
int end = start + "kenik".length();
System.out.println(sb.delete(start, end));
*/
//kenik -> XXX수정 100AXXXtrue
int start = sb.indexOf("kenik");
int end = start + "kenik".length();
System.out.println(sb.replace(start, end, "XXX"));
}
}
package days21;
public class Ex07 {
public static void main(String[] args) {
//String -> StringBuilder 코딩으로 수정
// String s = "1234567";
// 7654321
StringBuilder sb = new StringBuilder("1234567");
sb.reverse();
sb.setCharAt(0, '0'); //0번째 문자 0으로
sb.setLength(10);
System.out.println("["+sb+"]");
/*
char [] sArr = new char[s.length()];
for (int i = s.length()-1, j=0; i >= 0; i--) {
//sArr[s.length()-1 -i] = s.charAt(i);
sArr[j++] = s.charAt(i);
}
// = new String(sArr)
String result = String.valueOf(sArr);
System.out.println(result);
*/
}
}
package days21;
public class Ex07_02 {
public static void main(String[] args) {
// select rno, bno, reply, replyer, replydate, updatedate
// from
// (
// select /*+INDEX(tbl_reply idx_reply) */
// rownum rn, rno, bno, reply, replyer, replyDate, updatedate
// from tbl_reply
// where bno = #{bno}
// and rno > 0
// and rownum <= #{cri.pageNum} * #{cri.amount}
// ) where rn > (#{cri.pageNum} -1) * #{cri.amount}
String s = "1234567";
// 7654321
char [] sArr = new char[s.length()];
for (int i = s.length()-1, j=0; i >= 0; i--) {
//sArr[s.length()-1 -i] = s.charAt(i);
sArr[j++] = s.charAt(i);
}
// = new String(sArr)
String result = String.valueOf(sArr);
System.out.println(result);
}
}
package days21;
import java.util.StringTokenizer;
public class Ex08 {
public static void main(String[] args) {
// StringTokenizer 클래스 보다 split() 메서드 사용 권장
String data = "홍길동, 김길동, 이길동, 박길동";
// 1 1 1 1 토큰(token)
StringTokenizer st = new StringTokenizer(data);
st.nextToken();
/* 이거 사용하는게 나음
//String.split(regex)
String [] datas = data.split(",");
for (String name : datas) {
System.out.println(name);
}
*/
}
}
package days22;
public class Ex02 {
public static void main(String[] args) {
String msg = "System.out.println( 총페이지수 )";
StringBuffer sb = new StringBuffer(msg);
// ㄱ. println 문자열을 print 문자열로 변경하기
int start = sb.indexOf("println");
int end = start + "println".length();
sb.replace(start, end, "print");
System.out.println(sb);
// ㄴ. 총페이지수 앞 뒤에 "" 쌍따옴표 삽입하기
int offset = sb.indexOf("총페이지수");
sb.insert(offset, '"');
offset += "총페이지수".length() + 1;
sb.insert(offset, '"');
System.out.println(sb);
// ㄷ. 문자열 맨 뒤에 ;(세미콜론) 붙이기
sb.append(";");
sb.insert(sb.length(), ";");
System.out.println(sb);
// ㄹ. 총페이지수 의 총 한 문자 삭제하기.
// sb.setCharAt(index, ch);
sb.deleteCharAt(sb.indexOf("총페이지수"));
System.out.println(sb);
}
}
package days22;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
public class Ex03 {
public static void main(String[] args) {
double money = 1234567.1234;
String s = String.format("%,.2f", money);
System.out.println(s);
//형식화 클래스
String pattern = "#,###.00";
DecimalFormat df = new DecimalFormat(pattern);
String data = df.format(money);
System.out.println(data);
String datas = "홍길동, 김길동, 이길동, 박길동";
StringTokenizer st = new StringTokenizer(datas,", ");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
package days22;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
public class Ex03 {
public static void main(String[] args) {
double money = 1234567.1234;
String s = String.format("%,.2f", money);
System.out.println(s);
//형식화 클래스
String pattern = "#,###.00";
DecimalFormat df = new DecimalFormat(pattern);
String data = df.format(money);
System.out.println(data);
String datas = "강현구, 권희준, 김나린, 김민희";
StringTokenizer st = new StringTokenizer(datas,", ");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
'Java' 카테고리의 다른 글
[Java] 형식화 클래스 (~Format) (0) | 2021.07.17 |
---|---|
[Java] Date, Calendar 클래스 (java.util 패키지) (0) | 2021.07.17 |
[Java] 예외 처리 (Exception Handling) (0) | 2021.07.17 |
[Java] 추상화 / 인터페이스(Interface) / 익명 클래스(anonomous class) (0) | 2021.07.17 |
[Java] 클래스의 특징 - 다형성 / UpCasting, DownCasting (0) | 2021.07.17 |
Comments