문자열(2)

honeyricecake·2022년 5월 6일
0

학교 수업 - 자바

목록 보기
11/16

문자열의 각 문자 접근

  • 공백 제거
    String trim() : 문자열 앞 뒤 공백 문자(tab, enter, space)를 제거한 문자열 리턴
String a = "    abcd def    ";
String b = "     xyz\t";
String c = a.trim();
String d = b.trim();

c에는 abcd def
d에는 xyz가 저장된다.

  • 문자열 내부의 문자 접근
    char charAt(int index)
String a = "class";
char c = a.charAt(2);
//"class"에 포함된 's'의 개수를 세는 코드
int count = 0;
String a = "class";
for(int i = 0; i < a.length(); i++)
{
	if(a.charAt(i) == 's')
    {
    	count++;
    }
}

String 클래스 메소드 활용


public class StringEX {

	public static void main(String[] args) {
		String a = new String(" C#");
		String b = new String(",C++ ");
		
		System.out.println(a + "의 길이는 " + a.length());
		System.out.println(a.contains("#"));
		
		a = a.concat(b);
		System.out.println(a);
		
		a = a.trim();
		System.out.println(a);
		
		a = a.replace("C#", "Java");
		System.out.println(a);
		
		String s[] = a.split(",");  // 문자열을 문자열을 기준으로 분리 -> "" 사용해야 함.
		
		for(int i = 0; i < s.length; i++)
		{
			System.out.println(s[i]);
		}
		
		a = a.substring(5);  // 인덱스 5부터 끝까지 서브 스트링 리턴
		System.out.println(a);
	}

}

공백 제거 함수 비교 #1

String.trim()

  • 문자열 앞뒤의 공백 문자 제거
  • 유니코드가 활성화되기 이전에 제공된 함수라서 \u0020 이하의 공백 문자들만 제거

String.strip()

  • 문자열 앞뒤의 모든 유니코드 공백 문자 제거 (총 25개)
  • JDK 11 이후 추가된 메소드

공백문자 확인 Character.isWhitespace(int codePoint)

int count = 0;

for(int i = 0; i < 65536; i++)
{
	if(Character.isWhitespace(i))
    {
    	count++;
        System.out.printf("0x%x, ", i);
	}
}

25개이다.

문자열 검색

int indexOf(String str)

  • 문자열에서 처음으로 검색어(str)가 발견된 인덱스를 리턴
  • 검색어를 찾지 못한 경우 -1 리턴

int indexOf(String str, int fromIndex)

  • 문자열의 fromIndex부터 검색어(str)을 찾음
  • 검색어를 찾지 못한 경우, -1 리턴

boolean contains(String str)

  • 문자열이 검색어(str)를 포함하고 있는지 확인
  • true/false

문자열 검색 예제


public class SearchString {

	public static void main(String[] args) {
		String s1 = "Convert an integer value to float and print the int value found.";
		String searchWord = "int";
		boolean found = false;
		int startIndex = 0;
		int index = 0;
		int foundCount = 0;
				
				
		System.out.println(s1.indexOf(searchWord));
		
		while(true)
		{
			index = s1.indexOf(searchWord, startIndex);
			if(index == -1)
			{
				if(foundCount == 0) System.out.println("Not Found");
				break;
			}
			else
			{
				System.out.println(index + " ");
				startIndex = index + searchWord.length();
				foundCount++;
			}
		}
		System.out.println(foundCount);
	}

}

출력은 11 11 40 48 3이 되고
startIndex = index + searchWord.length(); 이 핵심이다.

문자열 치환 : replace

replace() 메소드

  • 치환할 문자나 문자열 입력

public String replace(char oldChar, char newChar)
public String replace(charSequence target, CharSequence replacement)

-> 치환할 문자나 문자열 입력

예제

String msg1 = "Hello World";
String msg2 = "This is a replace() method test program.";

System.out.println(msg1.replace('o', 'A"));  // 문자 변환
System.out.println(msg1.replace("l", "L"));  // 문자열 변환
System.out.println(msg2.replace(" ", ""));   // 모든 공백 제거

valueOf()

  • 전달된 인자를 문자열로 변환

StringBuffer 클래스

  • 가변 크기의 문자열 저장 클래스
    String 클래스와 달리 문자열 변경 가능
    StringBuffer 객체의 크기는 스트링 길이에 따라 가변적
    멀티스레드 환경에서 동기화 기능 제공

생성자

StringBuffer() : 초기 버퍼의 크기가 16인 스트링 버퍼 객체 생성
StringBuffer(CharSequence seq) : seq가 지정하는 일련의 문자들을 포함하는 스트링 버퍼 생성
StringBuffer(int capacity) : 지정된 초기 크기를 갖는 스트링 버퍼 객체 생성
StringBuffer(String str) : 지정된 스트링으로 초기화된 스트링 버퍼 객체 생성

CharSequence와 String의 차이 : CharSequence는 문자열 처리를 위한 인터페이스

주요 메소드

append : 문자열 덧붙이기
insert : 문자열 삽입 -> 스트링 버퍼의 offset위치에 문자열 삽입 -> offset + 1부터 들어감
replace : i부터 j - 1까지를 교체
delete : start부터 end가 지정하는 문자 앞까지 삭제
setLength : 스트링 버퍼 내 문자열 길이를 newLength로 재설정, 현재 길이보다 큰 경우 NULL로 채우며, 작은 경우는 기존 문자열이 잘린다.

StringTokenizer 클래스

  • java.util.StringTokenizer
    -하나의 문자열을 여러 문자열로 분리
    -문자열을 분리할 때 사용되는 기분 문자 : 구분 문자
    -토큰 : 구분 문자로 분리된 문자열
  • import java.util.StringTokenizer
  • String 클래스의 split() 메소드를 이용하여 동일한 구현 가능
    -정규식을 사용하는 split()함수보다 속도가 빠름
  • 예제
    -&가 구분 문자
String query = "name=kitae&addr=seoul&age=21";
StringTokenizer st = new StringTokenizer(query, "&");

괄호에 &=를 입력하면 &와 =으로 token을 나눈다.

생성자와 주요 메소드

생성자 -
StringTokenizer(String str) : str 스트링의 각 문자를 구분 문자로 문자열을 분리하는 스트링 토크나이저 생성

StringTokenizer(String str, String delim) : str 스트링과 delim 구분 문자로 문자열을 분리하는 스트링 토크나이저 생성

StringTokenizer(String str, String delim, boolean returnDelims) : str 스트링과 delim 구분 문자로 문자열을 분리하는 스트링 토크나이저 생성, returnDelim가 true이면 delim이 포함된 문자도 토큰에 포홤된다.

주요 메소드 -
int countToken() : 스트링 토크나이저가 분리한 토큰의 개수를 리턴
boolean hasMoreTokens() : 스트링 토크나이저에 다음 토큰이 있으면 true 리턴
String nextToken() : 스트링 토크나이저에 들어 있는 다음 토큰 리턴 -> 한번에 한개씩 리턴하는구나.

StringTokenizer 클래스 메소드 활용

import java.util.StringTokenizer;

public class StringTokenizerEx {

	public static void main(String[] args) {
		String query = "name=kitae&addr=seoul&age=21";
		StringTokenizer st = new StringTokenizer(query, "&=");
		
		while(st.hasMoreTokens())
		{
			System.out.println(st.nextToken());
		}

	}

}

0개의 댓글