날아라쩡글이의 블로그입니다.

String Class 본문

중앙 HTA (2106기) story/java API story

String Class

날아라쩡글이 2021. 10. 1. 16:06
반응형
  • 문자열을 표현하는 객체다. 
  • 문자열은 불변객체다. 
    • 한번 생성된 문자열은 절대로 변하지 않는다. 
  • String은 생성된 방법에 의해서 Class에서 상속이 되는지 new연산자로 객체가 생성이 되는지 다르다. 
  • String이 불변객체라는 의미는 한번 만들고는 변하지 않는 값이라는 의미이다. 즉, 상수라는 것이다. 
  • String은 ="";으로 생성할 수 있다. 그렇게 생성하면 이것은 new라는 연산자로 객체가 생성된 것이 아닌 class 변수로 상수들이 모여있는 상수풀이라는 저장공간에 Student라는 객체가 생긴다. 그리고 equals가 객체의 내부의 단어를 비교한 동등성의 법칙처럼 같은 단어가 존재하면 Student객체를 따로 생성하지 않고 참조변수를 ConstantPool 주소값에 연결한다. 
  • class는 변수, 생성자, 메소드가 존재한다. 
  • String Class는 메소드가 많이 존재한다. 
    •  문자열의 내용을 비교하고, 동등성 여부를 반환한다. (ex)  구글의 사람이 맞으신가요?)
    • Data를 주고 받을 때 일반적으로 text데이터를 주고 받는다 . Stirng으로 표현이 가능하다. 

리터럴 

  • 프로그램에서 상수값을 표현하는 방법
  • String class로 만드는 문자열 
  • 한번 만들어진 문자열은 변경할 수 없다.  = 상수이다. 
  • new연산자를 이용하여 String 객체를 만들지 않는다. 
  • String class로 만들게 되면 상수풀(Constant Pool- 상수들이 모여있는 곳)에 String 글자가 생성된다. 
  • 같은 글자일 경우 객체를 상수풀에서 1개로 만들어서 같이 사용한다. 즉, 같은 객체 이다. 
  • 같은 객체이며, 해쉬코드의 값이 동일하다. 
  • String문자열 값으로 해쉬코드의 값을 만들어 낸다. 
  • 비교연산자는 다르지만 (동일성 비교)
  • equals는 내용을 비교하기 때문에 *(동등성 비교) 실행 결과는 동일하게 나온다. 

 

메소드 (반환타입이 있는 경우 꼭 앞에 같은 타입을 담을 참조 변수를 입력해주자)

String class는  new생성자를 입력하지 않는다. 이미 네트워크 값에 String(byte[] byte)  , String(char[] value) 처럼 이렇게 담겨와 있기 때문에 생성자로 변환이 되서 출력된다. 

boolean값은 if문에서 많이 사용하는 메소드이다. 

  • int length();
    • 매개변수가 존재하지 않는다. int값으로 반환한다. 
    • 문자의 sequence의 길이, 순서대로의 문자열의 길이 
    • "abc".length();이렇게 사용가능하다. ->""자체가 String의 객체이기 때문
    • 글자 수를 확인해야할 때 , 몇 글자이상인지 확인해야할 때 사용한다. 
    • ex) 아이디는 9글자 이상, 비번은 8글자 이상, 사용자가 몇 글자이상인지 확인할 때 사용한다.
  • boolean equals(Object obj) ();
    • Object obj는 멤버변수이다. Object의 클래스 메소드를 재정의 한것이다. 
    •  문자열을 어떻게 만들던지 글자는 동일하기 때문에 true가 나온다. 
    • == 비교연산자는 동일성의 원칙, 문자열의 글자체제에 대한것은 동등성의 원칙이다. 
    • 동등성의 비교 =>만드는 방식에 따라 다른 결과가 나온다. 문자열은 불변객체기 때문에 동등의 비교로 하게 되면 틀린 값이 도출된다. 
    • 동일성의 비교 : 주소값을 비교한다. 
    • 동등성의 비교 : 문자열의 내용을 비교한다. 
    • 만드는 방법에 따라서 객체가 생성되는 위치가 class 저장장소인지 heap영역인지 다르게 생성이 된다. 
  • boolean isBlank(); 
    • String객체가 빈 문자열이거나 공백만 포함하고 있는 문자열인 경우 true를 반환한다. 
    • 빈 문자열도 공백으로 판단한다. 
    • 자바 11버젼에서 나왔다. 
  • boolean String변수.isEmpty(); 
    • 빈 문자열을 확인하는 변수이다.
    • String객체가 빈 문자열인 경우 true를 반환한다.
    • 공백 문자 또한 문자로 구분하기 때문에 공백문자가 있으면 false의 값이 나온다. 
    • 공백은 빈 문자열이 아니다. 
    • 빈 문자열은 공백조차 글자로 인식한다. 
  •  boolean contains(CharSequence str )();
    • String객체가 포함하고 있는 문자열에 지정된 문자열을 포함하고 있는지의 여부를 반환한다. 
    • (CharSequence str)부분에 ("   비교하고 싶은 문자열 ")을 작성하면 글자가 있는지 확인한다.
  • String String subString(int beginIndex)
    • String 객체가 포함하고 있는 문자열에서 지정된 시작위치부터 문자열의 맨 끝에 해당하는 문자열로 구성된 새로운 문자열을 생성해서 반환한다. 
    • 부분문자열을 생성한다. 
    • 0부터 시작한다. 
    • 아래 String String subStrin(int beginIndex, int endIndex)와 중복정의 되어 있다.
    • ex)주민등록번호의 중간의 7자리를 확인하여 남자인지, 여자인지 구별할 수 있다. 
  • String String subString(int beginIndex, int endIndex)
    • String객체가 포함하고 있는 문자열에서 지정된 범위내의 문자열로 구성된 새로운 문자열을 생성하여 반환한다. 
    • endIndex의 경우 -1의 값을 가진다. 
    • String str = " a b c d e f g h i j k  ";
    • indexNum=  0 1 2 3 4 5 6 7 89 10; 이다. 
    • String result2 = str.subString( 3 , 8 ); 인 경우 8은 포함되지 않는다. 
    • System.out.println(result2)의 값은 cdefgh이다. 
    • beginIndex~ endIndex-1이다.
    • 문자열을 새롭게 고치는 게 아니라 문자열은 그대로 있고, 새로운 문자열을 만들어서 반환해준다. 
    • 문자열안에 특정위치에 특정정보를 가진 경우가 있다. 그럴때 사용을 한다. 
    • ex)주민번호앞자리로 생월과 생일을 추출할 수 있다.
  • String toUpperCase() 
  • String toLowerCase()
    • 대소문자의 문자 체계를 갖고 있는 경우 획득이 가능하다. 
    • 각각 String 객체가 포함하고 있는 문자열에 대해서 대문자와 소문자로 구성된 새로운 문자열을 생성하여 반환한다. 
    • 이 또한 String객체를 변경하는 것이 아니라 대/ 소문자로 새롭게 만들어서 저장 후 출력하는 것이다. 
  • replace(String regExp, String replace text)
    • replace(CharSequence target, ChatSequence replacement)는 replace의  부모의 객체이다. 
    • String regExp: 원래의 정규 표현식(reqular)/ String replaceText : 변경할 문자열 
    • String의 replace(String regExp, String replace text는 String객체가 포함하고 있는 문자열에 대해서 첫번째 표현식에 해당하는 문자들을 찾아서, 두번째 인자에 해당하는 문자열로 대체된 새로운 문자열을 생성해서 반환한다. 
    • 정규표현식은 아래에 설명을 적어 놓겠다. 
  • String boolean startsWith(String prefix), String boolean endsWith(String suffix)
    • 각각 String객체가 포함하고 있는 문자열이 특정글자로 시작되는지, 특정글자로 끝나는지 여부를 반환한다. 
    • ex)이력서를 받는 사이트의 경우 word파일이나,아래한글의 확장자인지 확인해야하는 경우 알아 낼 수 있다. 
    • ex)url인 경우 http://는 외부 url, 프로젝트 url인지 확인할 때 알아 낼 수 있다. 
    • boolean값을 반환한다.
  • String  int indexOf(String text) , int lastIndexOf(String text) 
    • 문자열에서 지정된 문자열이 처음으로 등장하는 위치와 마지막으로 등장하는 위치를 반환한다. 
    • 지정된 문자열이 존재하지 않으면 -1을 반환한다. 
    • ex)지역번호가 이렇게 존재하는데 지역번호만 알고싶음, 섞여있어서 몇번째 위치인지 확인할 수 없음, 그럼 특정문자열의 위치를 가져올 수 있다. 
    •  
    • String text에 내가 원하는 문자열을 입력하면  된다. ("어떤 값");
  • String[] split(String delim) 
    • String객체가 포함하고 있는 문자열에 대해서 지정된 구분문자로 문자열을 자르고, 잘린 문자들을 배열에 담아서 반환한다. 
    • String text ="김유신 , 강감찬, 이순신";
    • String[]names = text.split(","); // String[]가 얻어진다. 
    • names = {"김유신", "강감찬","이순신"}; 
    • 향상된 for문을 사용하여 출력할 수 있다.
  • String trim();
    • String 객체가 포함하고 있는 문자열에 대해서 문자열의 좌/우가 포함된 불필요한 공백이 제거된 새로운 문자열을 생성해서 반환한다. 
    • trim이란 잘라내다라는 뜻을 가지고 있다. 
    • 글자사이에 있는 공백은 없애지 않는다. 그사이에 의미가 있다고 생각하기 때문이다.
    • ex)검색할 때, 회원가입할 때 , 주소를 입력할 때, 실제 데이터 저장시에는 공백을 없애고 저장하게 된다. 
    • 그러나 사용자는 어떤 값을 입력할지, 모르기 때문에 항상 사용자가 선택을 할 수 있는 방법을 사용하는 편이 좋다. 
  • String valueOf(int value) ,
  • String valueOf(long value) ,
  • String valueOf(double value) ,
  • String valueOf(boolean value) ,
  • String valueOf(char value) 
    • valueOf는 정적메소드 이다. class메소드이기 때문에 객체생성없이 사용이 가능하다.
    • extends Object를 하고 있다.  
    • valueOf(값)은 입력으로 전달받은 값에 대한 문자열을 생성한다. 
    • String valueOf(Object obj)처럼 최고조상객체를 넣어도 toString()결과값이 출력된다.
  • 문자열을 숫자로 변환하는 것은 Integet.ParseInt();이다.
    • Parse 1.원래값을 알아내다. 2. text데이터로부터 해석해서 객체를 생성한다라는 두가지 의미를 가지고 있다. 
    • 범용적인 의미로 사용된다. 
  • 기본자료형과 문자열간의 데이터 변환
  • 기본자료형을 문자열로 변환하기 
    • String 문자열 = String.valueOf("1234"); 
    • String 문자열 = String.valueOf("100000000000");
    • String 문자열 = String.valueOf(true); 
    • String 문자열 = String.valueOf('A');
  • 문자열을 기본자료형값으로 변환하기// 전부 java.lang에 존재하는 클래스이다. 
  • int 정수 = Integer.parseInt("1234");
  • long 정수 = Long.parseLong("1000000000000000");
  • double 실수 = Double.parseDouble("3.141592");//많이 사용된다. 
  • boolean 논리값 = Boolean.parseBoolean("true");
  • char은 잘 사용하지 않는다. 

정규표현식

  • \,^,$,*,+,? 표현식이 존재한다.
  • 다양한 표현식이 존재하고 있다. 
  • 글자 하나의 추출 : /대 / -->1개만 출력된다. 
  • 특정 단어를 갖고 있는 경우 전부 출력한다 /대/g -->대라는 문자가 들어간 문자열을 전부 찾는다. 
  • /[대a0]/ []란 or역활을 가지고 있다. 대, a, 0도 찾는다.
  • /[^0~9]/ ^란 not의 의미를 가지고 있다. 
  • 패턴을 적용해서 해당되는 패턴을 찾는 것이다. 
  • 활용하면 text내에서 내가 원하는 text를 빠르게 찾고 변경할 수 있다. 
  • 프로그래밍언어는 전체적으로 지원하고 있다. 
  • 수량을 입력할 때 ,숫자를 작성하고
  • id를 입력했을 때 , 전화번호, 카드번호 등 영어와 대소문자, 지정된 특수문자로 작성이 되어있는지 확인해야한다. 
  • 패턴화 했기 때문에 patten에 맞에 입력했는지 확인해야한다. patton에 따른 유효성체크시에도 확인한다. 
  • 인터넷에 공개되어있고, 손에잡히는 정규표현식이라는 책도 추천한다. 
  • java에서는 정규표현식을 즐겨사용하지 않기 때문에 많이 어렵게 되어있다. 
  • java web상에서는 많이 사용된다. MDN web Docs에서 표현기술들을 확인하는 편이 좋다. 
  • Stackoverflow사이트를 이용하여, 오류가 났을 때 어떤 것이고, 해결을 어떻게 해야하는지 확인하는 것도 좋다. 

TextData의 유형(텍스트 데이터)

  1. pain text
    • 일반적으로 사용하는 text이다. 
    • "안녕하세요","반갑습니다.","비밀번호가 일치하지 않습니다.","서버에서 알수 없는 오류가 발생하였습니다."
  2. CSV text(comma seperate vlaue)
    • "김유신,이순신,강감찬" , "01,서울시,2021,0930,100.2"
    • comma , 을 기준으로 값이 나눠지는 것이다. 
    • 공공데이터 포탈 site에서 CSV로 다운 받으면 엑셀에서 바로 표를 획득할 수 있다.
  3. XML
    • 다목적 마크업 문서이다. 
    • W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록, 권장하는 다목적 마크업 문서이다. 
    • 다른 많은 종류의 데이터를 기술하는데 사용할 수 있다.
    • <book>
    • <title>이것이 자바다</title>
    • <writer>신용형</writer>
    • <publisher>한빛미디어</publisher>
    • <pubdate>2017-04-09</pubdate>
    • <price>35,000원</price>
    • </book>
    • 한눈에 봐도 어떤 데이터인지 추축이 가능하다. 
    •  data가 뭔지 표현하는 것이 메타데이터, 부가적인 정보라고한다. 
    • 그런데 이런 데이터는 실제 데이터는 20글자,부가적인 정보의 경우 125글자이다. 주고받는 데이터가 많아지고, 확인할 데이터가 너무 많아 졌기 때문에 추출하기 어려워 대체제가 필요해졌다. 
  4. JSON text
    • 속성-값 쌍, 키-값 쌍으로 이뤄진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/ 서버통신(AJAX)을 위해, XML을 대체하는 주요 데이터 포맷이다.
    • XML을 대체제로 나온것이 JSON문서이다. 
    • 영화진흥위원회사이트에 open API문서를 확인하면 키와 값 쌍으로 이뤄져 있다. 
    • [{"ranking" : 1 , "title" : "007노타임투다이","open Date : "2021-09-29"}]이렇게 기본키 값으로 설정한 값과 그거에 맞는 값의 형태를 가지고 있다. 키-값 쌍, 속성과 값 속성-값쌍으로 쉽게 데이터를 이해하고 확인할 수 있다. 

XML과 JSON의 경우 라이브러리가 존재한다. GSON이라는 google에서 만든 라이브러리가 존재한다. 

CSV텍스트를 자바객체로 자바객체에서 CSV텍스트

XML텍스트 자바객체 , 자바객체에서 XML텍스트 

JSON텍스트 자바객체, 자바객체에서 XML텍스트로 변경할 수 있다. 

그렇다면 왜 객체자체를 주면 안될까??

  • 기상청에서 날씨자료를 획들할 때 공항, 방송사, 군대 , 어업등을 통해 자료를 얻는다. 
  • 기상청에서는 java를 사용한다고 하지만, 공항, 방송사, 군대, 어업의 경우 java를 사용한다는 보장도 없고, 어떤 시스템으로 만드는지는 모른다(c언어, python을 사용할 수 있다.)
  • 그렇기 때문에 제일 좋은 방법은 text를 받는 것이다. 모든 프로그래밍언어는 text를 인식하고, 이해하기 좋은 파일로 주는 것이 좋기 때문에 
  • XML,JSON text문서로 주는 것이 좋다. 데이터자체는 "자기표현적"이다
  • 공개하지 말아야하는 것은 숨겨진 text로 암호화가 된 파일이다. 
  •  web에서는 XML,JSON의 사용이 많이 된다. 
반응형

'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글

Set interface, List interface(iterator)  (0) 2021.10.07
Generic(제네릭)  (0) 2021.10.05
System, Wrapper, math class  (0) 2021.10.03
StringBuilder, StringBuffer  (0) 2021.10.03
java API, java.Lang  (0) 2021.09.30
Comments