일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 어노테이션 #@WebServlet #WebServlet #
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- 8 실무에서 가장 많이 사용하는 SQL
- 자바웹프로그래밍
- html #자바와서블릿 #자바와웹연결 #웹연결
- web.xml #배포지시자 #서블릿테스트
- View #
- 서블릿선언 #서블릿선언방법 #
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- Init-param #context-param #
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- 정처기3회 #정보처리기사2023
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- Doit #Doit오라클 #Doit시리즈 #연습문제
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- 마이바티스환경설정
- Controller
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- 정처기필기합격 #정처기합격후기
- Model #
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- Today
- Total
장미의 개발일기
String 클래스의 특징과 자주 쓰는 메소드 & StringTokenizer, split 차이 본문
String 클래스:
1. 한번 정의된 문자열은 변경할 수 없다.
2. 문자열 리터럴을 바로 입력해 객체를 생성할 때 같은 문자끼리 하나의 객체를 공유한다.
(다른 클래스에는 없는 독특한 특징)
String 클래스 객체 생성 :
암묵적 객체 생성 : String str1 ="안녕";
명시적 객체 생성 : String str1 = new String("안녕");
Java에서는 모든 객체를 생성할 때 new 키워드를 사용해야 한다.
다만 String 클래스는 특별하게 "문자열" 이렇게 바로 객체 생성이 가능하다.
보통은 문자열이 같으면 힙 영역 메모리에서 같은 위치를 공유한다. 다만
위에 명시 해놓은 '명시적 객체 생성방법'으로 객체가 생성되면, 두 객체가 같은 문자열을 가지고 있다고 해도
주소값이 달라서 주의해야한다.
(equals로 비교하면 true가 떠버리니 주의)
아래 예시를 보면 이해하기 쉽다
위에 있던 String 클래스의 특징 첫번쨰: 한번 정의된 문자열은 변경할 수 없다.
아래 소스:
얼핏보면 문자열끼리 더하는 것으로 보이지만, 실제로는
객체 str1 있는 줄에서 객체가 5개나 생성이 되었다.
안녕, 하세요, !가 각 하나씩에 총 3개
안녕 + 하세요 => 이렇게 1개
안녕하세요 + ! => 이렇게 1개
총 5개다. 물론 이건 String 객체의 특징을 설명하기 위해서 예시를 든거지만,
메모리에는 비효율적이다.
*** 반드시 외워야할 String 클래스의 주요 메소드***
표에 있는 걸 전부 작성할 순 없고, 간추려서 적어보겠다.
*length( ): 문자열의 길이를 리턴 (배열과 관련해서 자주 써봄)
*charAt() : 문자열에서 특정 인덱스에 위치해 있는 문자를 반환해줌
*indexOf(): 문자열에서 특정문자나 특정 문자열을 앞에서부터 찾아 위칫값을 알아낸다.
*lastIndexOf(): 문자열에서 특정 문자가 특정 문자열을 뒤에서부터 찾아 위칫값을 알아낸다.
**getByte() : 문자열을 -> byte[ ](배열)로 반환 ***
**toCharArray(): 문자열 -> char[ ](배열)로 반환**
*String.valueOf(~~~다양한 문자열 옵션) : 다른 자료형 -> 문자열로 변환 (정적메소드다)
* 배열 관련: Arrays.toString(배열) => 배열을 자동으로 배열형(문자열)으로 출력해줌 ****
아래 예제가 코드치기가 좀 노가다이긴 한데, 이해하기 좋은 예제인 듯?
하마터면 인덱스번호 0번부터 인거 까먹고 잘못 이해할 뻔했다
package book;
import java.util.Arrays;
public class Page_199 {
public static void main(String[] args) {
///****** 인덱스는 0부터 시작함을 명심하자****
// **** 공백도 카운트 ******
//문자열 길이
String str1 = "Hello Java!";
String str2 = "안녕하세요! 반갑습니다.";
System.out.println(str1.length());
System.out.println(str2.length());
System.out.println();
//문자열 검색
// @charAt()
System.out.println(str1.charAt(2));
System.out.println(str2.charAt(5));
System.out.println();
// @indexOf(), lastIndexOf()
///****** 인덱스는 0부터 시작함을 명심하자****
System.out.println(str1.indexOf('a'));
System.out.println(str1.lastIndexOf('a'));
System.out.println(str1.indexOf('a',8));
System.out.println(str1.lastIndexOf('a',8));
System.out.println(str1.indexOf("Java"));
System.out.println(str1.lastIndexOf("Java"));
System.out.println(str2.indexOf("하세요"));
System.out.println(str2.lastIndexOf("하세요"));
System.out.println(str1.indexOf("Bye"));
System.out.println(str2.lastIndexOf("고맙습니다."));
System.out.println();
//문자열 변환 및 연결
// @String.valueOf(기본 자료형): 기본 자료형 -> 문자열 변환
String str3 = String.valueOf(2.3);
String str4 = String.valueOf(false);
System.out.println(str3);
System.out.println(str4);
// @concat(): 문자열 연결
String str5 = str3.concat(str4);
System.out.println(str5);
// String.valueOf() + concat()
String str6 = "안녕" + 3;
String str7 = "안녕".concat(String.valueOf(3));
System.out.println(str6);
System.out.println(str7);
//문자열을 byte[] 또는 char[]로 변환
String str8 ="Hello Java!";
String str9 = "안녕하세요";
// @getBytes(): 문자열 -> byte[]로 변환
byte[] array1 = str8.getBytes();
byte[] array2 = str9.getBytes();
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
// @ toCharArray():문자열 -> char[] 변환
char[] array3 = str8.toCharArray();
char[] array4 = str9.toCharArray();
System.out.println(Arrays.toString(array3));
System.out.println(Arrays.toString(array4));
}
}
출력화면:
이외에도
* replace(): 일부 문자열 -> 다른 문자열로 대체
*subsstring(): 문자열의 일부만을 포함하는 새로운 문자열 객체를 생성
*split() : 특정 기호를 기준으로 문자열을 분리한다.
*trim(): 문자열의 좌우 공백을 제거한다.
*equals(): 두 문자열의 위칫값이 아닌 실제 데이터 값을 비교한다. 이때 대소문자를 구분한다.
=> 이 포스팅 앞에서 나왔던 내용 ! String 객체 비교할땐 이 함수 쓰면 안 된다.
암묵적 객체 생성 : String str1 ="안녕";
명시적 객체 생성 : String str1 = new String("안녕");
*split() : 특정 기호를 기준으로 문자열을 분리한다.
=> 특별 내용 추가
String 클래스의 "split( )" 메소드와 클래스 StringTokenizer의 차이와 공통점에 대해 알아보자.
둘 다 특정 기호(구분자)를 기분으로 문자열을 잘라주는 기능을 가지고 있다.
split : whitespace(뛰어쓰기, 즉 공백)를 데이터 취급한다.
StringTokenizer : whitespace(뛰어쓰기, 즉 공백)를 데이터 취급하지 않는다.
아래 예시와 출력을 보면 이해하기가 수월하다.
package repeat;
import java.util.StringTokenizer;
public class Token {
public static void main(String[] args) {
//면접에 나올 수도 있음
//StringTokenizer는
// " ♥Whitespace♥ "를 데이터취급을 안함
//화이트 스페이스= 뛰어쓰기
// 하트 2개의 사이에 공백이 없다고 취급하고
//하트를 기준으로 나누되, 하트는 세지 않는다 노카운트
String str="김길동♥이시국★김수현♥전지현♥♥수지";
StringTokenizer stz = new StringTokenizer(str, "♥");
System.out.println("Token Count:"+stz.countTokens());
while(stz.hasMoreElements()) {
String strv = stz.nextToken();
System.out.println(strv);
System.out.println("----------------------------");
}//wh
// java.util.NosuchElement =>없는 토큰!!!
// whitespace도 데이터 취급
// 하트사이에 공백이 있다고 취급;
str="김길동♥이시국★김수현♥전지현♥♥수지";
String[] arr= str.split("♥");
System.out.println("배열의 길이 : "+arr.length);
for (String e: arr) {
System.out.println(e);
}
System.out.println("-----------------------------");
System.out.println(arr[0]);
}
}
추가로 String 다른 주요 메소드들 예제 실습해봄
그런데 split 예제가 뭐가 문제인지 내 노트북에선 잘 안먹히는건지
이상하게 출력 됌;;
기호를 공백 등 다 바꿔봐도
[Ljava.lang.String;@372f7a8d 이딴게 출력된다...
package book;
public class Page_202 {
public static void main(String[] args) {
//문자열 수정
// @toLowerCase(), toUpperCase()
String str1 = "Java Study";
System.out.println(str1.toLowerCase());
System.out.println(str1.toUpperCase());
System.out.println(str1.replace("Study","공부"));
// @substring()
System.out.println(str1.substring(0,5)); //인덱스 4는 공백
// split()
String[] strArray = "abcdefghijil".split("45555");
System.out.println(strArray);
// @trim()
System.out.println(" abc ".trim());
System.out.println();
//문자열의 비교
String str2 = new String("Java");
String str3 = new String("Java");
String str4 = new String("java");
// @stack 메모리 비교(==): 위치(번지) 비교
System.out.println(str2==str3);
System.out.println(str3==str4);
System.out.println(str4==str2);
//@equals(), equalsIgnoreCase(): 내용 비교
System.out.println(str2.equals(str3));
System.out.println(str3.equals(str4));
System.out.println(str3.equalsIgnoreCase(str4));
}
}
배열 오름차순, 내림차순으로 출력하기 :
오름차순 : Arrays.sort(정렬시킬배열주소)
내림차순: Arrays.sort(number, Collections.reverseOrder());
(int형 배열에선 오류가 나는데, Collections클래스는 객체만 사용할 수 있기 때문이다.
int배열 자체는 객체가 맞지만, 각 원소들은 기본 자료형이라 에러가 난다.
변수를 Wrapper 클래스, Integer형으로 바꾸면 해결이 된다.
package ex1;
import java.util.Arrays;
import java.util.Collections;
// java.util.Arrays 클래스
public class Ex6_Sort {
public static void main(String[] args) {
String[] arr = {"Z","X","A","C","B"};
int[] number = {10,3,11,40,22,12};
System.out.println("순수하게 출력!");
for(String e : arr) {
System.out.println(e);
}
for(int e:number) {
System.out.println(e);
// Syste.out.prinln(e.); => 객체가 아니라 ㄴㄴ
}
System.out.println("===============================");
System.out.println("arr 정렬해서 출력!");
// 오름차순 : Arrays.sort(정렬시킬배열주소)
Arrays.sort(number); //정렬
System.out.println("오름차순 정렬 출력!");
for(int e: number) {
System.out.println(e);
}
System.out.println("======================");
Arrays.sort(arr); //정렬
for(String e: arr) {
System.out.println(e);
}
System.out.println("======================");
//내림차순 Collection.reverseOrder
System.out.println("String 내림차순 =====================");
// Collection -> 객체전용 자료구조이다.
// sort에서 상세히 자료형 맞추는 이유: int배열은 객체지만 안의 자료형은 일반 자료형이니까
Arrays.sort(arr, Collections.reverseOrder());
for(int e:number) {
System.out.println(e);
}
// Arrays.sort(number, Collections.reverseOrder());
//오류남 해결 방법: Wrapper 클래스 int -> Integer
// byte -> Btye 등 변환? 감싸주는 ? colletions 가 객체만을 위한 함수라서
//int형 배열로 이용하려면 Wrapper 클래스를 사용해서 Integer클래스로 바꿔줘야 오류가 안난다
Integer[] number2= {10,3,11,40,22,12}; //int 배열을 Integer 배열로 바꾸면 해결됌
Arrays.sort(number2, Collections.reverseOrder());
System.out.println("Integer 내림차순 ============================");
for(int e : number2) {
System.out.println(e);
}
/*System.out.println("내림");
Arrays.parallelSort(number);
for(int e:number) {
System.out.println(e);*/
}
}
** 메소드 인자 칸!! 에 배열 표현 가능
(string...a) (int...a) 이런식으로 표기하면 됌
public static void intRing1(Integer...a) { Arrays.sort(a); Arrays.sort(a, Collections.reverseOrder()); for(int e: a) { System.out.print(e+" "); } } |
'개발일기 > Java' 카테고리의 다른 글
클래스와 객체 (0) | 2023.04.19 |
---|---|
Do it! 자바 완전 정복 (김동형) - 배열 연습문제 5장 참조자료형 (0) | 2023.04.19 |
static 메소드 및 필드멤버 : 회원가입 프로그램 만들기 (0) | 2023.04.18 |
2차원 배열 : For문 메세지출력창 만들기 (0) | 2023.04.18 |
배열을 만들고 출력하는 프로그램 만들기 (0) | 2023.04.17 |