개발 공부/JAVA

String 구문- charAt(),IndexOf(),subString(),Split()

공부하는개발자_ 2023. 5. 25. 08:49

 

 

 

 

 

 

 

절차지향언어: C 

기능에 focus(회전시킨다). 빠르다.

제공자쪽 소스코드가 바껴야 하면  사용자쪽 소스코드도 같이 바껴야함. (결합도가 높은 코드)

원을 회전시킨다
사격형을 회전시킨다

 


객체지향언어 

객체에 focus (원,사각형)
속도가 느리다


을 회전시킨다
사격형을 회전시킨다

 

 

메모리

stack : 지역변수, 메소드를 호출할때마다 생성되는 프레임이 저장됨. 메소드 호출이 끝나면 프레임은 자동 제거 됨.
heap : 객체가 생성되는 영역 , 멤버 변수 (객체 생성시 자동 초기화 됨)

객체의 특징이 되어야할 변수는 멤버변수로 선언되어야 한다. 

(지역변수는 특정 블록 내에서만 사용될 수밖에 없기 때문)

 

== (같다), !=(다르다) 연산
변수의 값이 같은지, 아닌지를 조사. 참조 타입 변수의 ==, != 연산자는 번지를 비교하는 것이 된다. 번지가 같다면 동일한 객체를 참조하는 것이고, 다르다면 다른 객체를 참조하는 것이다.

 

Stirng의 특성

String s1 = new String("Hello");
String s2= "Hello";
String s3= new String("Hello");
Stirng s4= "Hello";


1. 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있음.
s2와 s4변수에는 동일한 String객체의 번지가 저장된다. ( s2 == s4 의 결과 True)


2. s1과 s3처럼 new 연산자로 직접 객체를 생성하고 대입하는 경우,

서로 다른 String객체의 번지를 가지게 됨. (s1 == s3 의 결과 false)
문자열 리터럴로 생성하느냐, new연산자로 생성하느냐에 따라 비교 연산자의 결과가 달라질 수 있음.

 

3. 문자열 내용을 비교할 경우에는 .equals()사용

    메모리를 비교할때는 == 로 비교한다.

 

String s1, s2, s3, s4;

s1 = "HELLO";

s2 = new String("HELLO");

s3 = new String("HELLO");

s4 = "HELLO";

System.out.println(s1 == s2); //false

System.out.println(s1 == s3); //false

System.out.println(s1 == s4); //true

 

System.out.println(s1.equals(s2)); //true

System.out.println(s2.equals(s3)); //true

System.out.println(s1.equals(s4)); //true

 

문자열 길이 : length()

String subject = "자바 프로그래밍";

int length = subject.length();

 

문자열에서 문자의 개수를 얻고 싶을땐 length()메소드 사용. 

length변수에는 공백을 포함해서 8이 저장됨

 

//Palindrome문자열입니다 또는 Palindrome문자열이 아닙니다

String palindrome = "ABBA"; // 기러기 , SOS, 소주만병만주소,..

int size = palindrome.length();

int i;

for(i=0; i<size/2; i++) {

char c1 = palindrome.charAt(i); //앞

char c2 = palindrome.charAt(size-1-i); //뒤

if(c1 != c2) {

break;

}

}

 

if(i==size/2) {

System.out.println("Palindrome문자열입니다");

}else {

System.out.println("Palindrome문자열이 아닙니다");

}

 

 

문자추출: charAt()

특정 위치의 문자를 얻고 싶을때 사용. 매개 값으로 주어진 인덱스의 문자를 리턴.

 

String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);   //결과 : '프'


자바 프로그래밍
 01 2 3 4 5 6 7 8 (<-index)

 

 

문자열 잘라내기 : substring()

문자열에서 특정 위치의 문자열을 잘라내어 가져오고 싶다면 substring()메소드를 사용.

substring (int beginiIndex) : beginIndex에서부터 이후 모든 문자열 리턴.
substring (int beginiIndex, int endIndex) : beginIndex에서부터 endIndex앞까지 잘라냄.

 

String ssn = "880815-1234567"
string firstNum = ssn.substring(0,6);  //880815 (0~5까지 인덱스)

string seconNum= ssn.substring(7);   //1234567

 

 

 

특정 문자열의 위치를 찾고자 할때 :indexOf()
특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며 만약 찾지 못했을 경우 "-1"을 반환.

 

문자열 분리 : split() 

여러개의 문자열로 구성되어 있을 경우, 이를 따로 분리해서 얻고 싶을 때 사용.

String board = "번호, 제목, 내용, 글쓴이";
String[] arr = board.split(",");

System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);

 

 

import java.util.StringTokenizer;
public class StringTest {
public static void main(String[] args) {

 

String score = "54:89:30";

String[] scoreArr = score.split(":");

System.out.println("국어:"+Integer.parseInt(scoreArr[0]));

System.out.println("영어:"+ scoreArr[1]);

System.out.println("수학:"+ scoreArr[2]);

 

 

score = "54::30";

scoreArr = score.split(":");

System.out.println("국어:" + Integer.parseInt(scoreArr[0]));

System.out.println("영어:" + scoreArr[1]);

System.out.println("수학:" + scoreArr[2]);

int k = Integer.parseInt(scoreArr[0]);

int e = scoreArr[1].equals("")?0:Integer.parseInt(scoreArr[1]);

int m = Integer.parseInt(scoreArr[2]);

System.out.println("평균:" + ((float)(k+e+m)/scoreArr.length));

 

System.out.println("--------------");

StringTokenizer st = new StringTokenizer(score, ":");

 

int sum = 0; //총점

int cnt = 0; //과목수

while(st.hasMoreTokens()) { //score문자열에 :구분자로 분리할 문자열이 있는가

String s = st.nextToken();

System.out.println(s);

sum += Integer.parseInt(s);

cnt++;

}

System.out.println("평균:" + ((float)sum/cnt));

//URL구성요소 - 프로토콜://호스트명/패스?쿼리

String urlStr =

"https://n.news.naver.com/mnews/article/214/0001273928?sid=101";

parseURL(urlStr);

}

static void parseURL(String url) {

//url에서 사용하는 프로토콜을 출력하시오

//hint : indexOf(), substring()

 

String[] arr = url.split("\\?"); //?구분자로 분리

String[] protocolHostPath = arr[0].split("/");

 

String host = protocolHostPath[2];

System.out.println("호스트값:" + host);

 

String path = "";

for(int i=3; i<protocolHostPath.length; i++) {

if(i>2) {

path += "/";

}

path += protocolHostPath[i];

}

if(protocolHostPath.length > 2) {

System.out.println("패스값:" + path);

}

 

if(arr.length == 2) {

String []query = arr[1].split("\\&");

for(int i=0; i<query.length; i++) {

String[] queryNameValue = query[i].split("=");

String queryName = queryNameValue[0];

String queryValue = queryNameValue[1];

System.out.println("쿼리변수이름:" + queryName + ", 변수값:" + queryValue);

}

}