본문 바로가기
개발/자바

자바 String 처리 방법

by kakk789 2022. 4. 7.

자바 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);
		}

 

반응형

댓글