자바 String 처리
일반 String
- 특성은 변하지 않는 문자열
- 예를들어 string에 더하기 연산을 하게 되면 새로운 객체를 생성하게 되고 참조 변수는 새로운 메모리를 참조
- 이전에 참조하던 메모리는 더이상 참조되지 않는 garbage가 됨
- 그래서 String은 변하지 않을 것 같은 문자열만 처리하는게 좋다
StringBuffer
- 특성은 변하는 문자열
- StringBuffer는 String과 다르게 원래 객체에 배열을 추가
- append()함수를 이용하여 문자열을 추가할 수 있음
StringBuffer를 String으로 받는 방법
1. new String(stringbuffer) -> StringBuffer형식을 String으로 받고 싶을 때
2. stringBuffer.tostring() -> to.string()을 사용해서 받아도됌.
public class StringBufferTest {
public static void pro(String data) {
System.out.println(data);
}
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("hello");
sb.append("java");
// pro(sb); // 에러
pro(new String(sb));
pro(sb.toString());
}
}
Stringbuilder
- 특성은 변하는 문자열
** 아래와 같이 char형의 배열도 String으로 받을 수 있다.
char []data = {'a','b','c','d','e','f','g'};
String data1 = new String(data);
String data2 = new String(data,1,3);
System.out.println(data1);
System.out.println(data2);
String 관련 함수
endsWith
endsWith ( String suffix)
반환 값 : boolean
- 문자열이 특정 패턴으로 끝나는지 확인
startsWith
startsWith(String prefix)
startsWith(String prefix, int toffset)
반환 값 : boolean
- 문자열이 특정 패턴으로 시작하는지 확인
성이 김씨일 경우를 찾는 코드
Scanner sc = new Scanner(System.in);
System.out.println("이름을 입력하세요");
String name = sc.next();
if (name.startsWith("김")) {
System.out.println("김씨입니다.");
}
else {
System.out.println("김씨가 아닙니다.");
}
equalsIgnoreCase
endsWith(String suffix)
반환 값 : boolean
- 문자열 비교 시 대소문자 구분 안함
String data1 = "hello";
String data2 = "hello";
if(data1.equalsIgnoreCase(data2)) {
System.out.println("대소문자를 구별없이 같아요");
}
else {
System.out.println("대소문자를 구별없이 달라요");
indexOf
indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
반환 값 : int
- 찾는 문자열이 몇번째 인덱스에 있는지 확인 가능 (0부터 시작)
String data = "hello java";
int n= data.indexOf("j");
System.out.println(n);
lastIndexof (indexOf 역순)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
lastIndexOf(String str)
lastIndexOf(String str, int fromIndex)
반환 값 : int
- 찾는 문자열을 마지막부터 몇번째 인덱스에 있는지 확인
String data = "hello java";
int n3 = data.lastIndexOf("a");
System.out.println(n3);
replace
replace(char oldChar, char newChar)
replace(CharSequence target, CharSequence replacement)
반환 값 : String
- 문자열을 다른 문자로 치환
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
String 타입 data에 "java'를 "oracle"로 치환
String data = "hello java";
String data2 = data.replace("java", "oracle");
System.out.println(data2);
System.out.println(data);
split
split(String regex)
split(String regex, int limit)
반환 값 : String []
' , '를 기준으로 분리 후 배열 값으로 리턴
String data = "김유신,홍길동,장보고,연개소문";
String kk[]= data.split(",");
for (int i=0 ; i<kk.length; i++) {
System.out.println(kk[i]);
}
substring
substring (int beginIndex, int endIndex)
beginIndex 는 0부터 ~ endIndex 까지 문자열 자르기
주의사항은 : endIndex 는 endIndex -1 까지만 출력하므로 +1을 해줘야함
substring (int beginIndex)
beginIndex 부터 ~ 끝까지
String data = "hello java hello oracle";
String aa = data.substring(6, 10);
System.out.println(aa);
toLowerCase
toLowerCase()
toLowerCase(Locale locale)
반환 값 : String
- 모두 소문자로 바꾸기
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
toUpperCase
toUpperCase()
toUpperCase(Locale locale)
반환 값 : String
- 모두 대문자로 바꾸기
- 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
String upper = "abcdefu";
System.out.println(upper.toUpperCase());
String.join
String.join("델리미터", 배열)
String.join("델리미터", 변수1, 변수2 등등)
반환 값 : static String
- join 함수를 이용하여 배열 사이에 델리미터 추가하기
String.join(", ",arr);
trim
- 공백제거
- 반환 값 : String
data.trim();
예제 - member 배열 중에서 이름의 공백을 제거하고 tiger 가 몇명 인지 출력(대소문자 상관없음)
String []member = {"tiger","kim","Tiger","hong"," tiger", "lee"," Tiger"};
int n=0;
for (String name:member) {
if (name.trim().toLowerCase().equals("tiger")) {
n ++;
}
}
System.out.println(n);
예제 - String 타입의 url 변수에 담긴 데이터의 마지막 / 뒤에 있는 스트링 값을 출력
출력 값 : "list" 라는 문자열 출력 됨
String url = "http://www.xxx.co.kr/list";
System.out.println(url.substring(url.lastIndexOf("/")+1));
StringTokenizer
- 특정 델리미터로 배열 분리가능. (String.join 이랑 비슷한 개념인듯)
nextToken() : 하나씩 꺼내옴
hasMoreTokens() : 내용이 있으면 true, 내용이 없으면 false
String data = "홍길동,이순신,유관순,김유신";
StringTokenizer st =new StringTokenizer(data, ",");
String a = st.nextToken(); //홍길동
String b = st.nextToken(); //이순신
String c = st.nextToken(); //유관순
String d = st.nextToken(); //김유신
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
String data = "홍길동,이순신,유관순,김유신";
StringTokenizer st =new StringTokenizer(data, ",");
while(st.hasMoreTokens()) {
String name = st.nextToken();
System.out.println(name);
}
반응형
'개발 > 자바' 카테고리의 다른 글
Wrapper 클래스 (0) | 2022.04.07 |
---|---|
char - int (다른 자료형 끼리 연산) (0) | 2022.04.07 |
익명 클래스를 이용한 추상클래스 객체 생성 방법 (0) | 2022.04.07 |
(자바)값에 의한 호출 vs 참조에 의한 호출 (0) | 2022.04.05 |
Java) getter, setter (0) | 2022.04.04 |
댓글