[java] String 함수 총정리

2024. 8. 15. 15:34·JAVA

20240813 수업

문자열 조작 함수
//           0123456 7 8 9012
String s1 = "Hello 李순신 123"; //영어와 공백과 숫자는 1bytes 한글 한자는 3bytes
String s1_2 = "Hello 李순신 123";
//                      0 1 2 3 4 56789012
String s2 = new String("안녕하세요 Mark 42");
String s2_2 = new String("안녕하세요 Mark 42"); //새 메모리 생성

 

문자열길이(글자수) = UNI-code문자의 개수

int len1 = s1.length(); // 13>>공백 포함

System.out.println( len1 );

 

int len2 = s2.length(); // 13>>공백 포함

System.out.println( len2 );

문자열 byte 수 구하기

// byte[] b = s1.getBytes();   문자열을 byte[] 배열로 변환

byte[] b = s1.getBytes();

System.out.println(b); //[B@372f7a8d:배열의 위치의 hashcode (메모리 위치 16진수)

int lenb1 = s1.getBytes().length; // length : 배열의 길이, 19 (1*5+1+3*3+1+1*3)

System.out.println( lenb1 );

특정위치의 문자열(또는 문자)을 추출∙찾기

String name = s1.substring(6, 8+1); // (시작위치, 끝위치(+1해줘야 함.) substr일때▶ (시작위치, 개수)

System.out.println(name); //李순신

 

String strbytes2 = new String( "Hello Java".getBytes() , 6, 4 ); //6의 위치에서 4개를 뽑아냄

System.out.println( strbytes2 ); // 'Java'

H:0, e:1,  l:2, l:3, o:4,   :5, J:6, a:7, v:8, a:9  (공백과 영어는 1byte)

      //               01234567890123
      String  jumin = "970508-2111020";

System.out.print(jumin.substring(0, 2) + " "); // "97"

System.out.print(jumin.substring(2, 4) + " "); // "05"

System.out.print(jumin.substring(4, 6) + " "); // "08"

System.out.print(jumin.substring(7, 8) + " "); // "2"


char ch1 = s1.charAt( 6 );//6에 위치해있는 문자(char) 한 자를 꺼내라

System.out.println( ch1 ); // 李

int pos1 = s1.indexOf('l'); // -1 : 못찾았을때

System.out.println( pos1 ); // 2 : 첫번째의 'l' 위치

int pos2 = s1.indexOf('l', pos1+1); // 2+1 : 2 다음 부터 문자의 위치를 찾음

System.out.println( pos2 ); // 3 : 두번째의 'l' 위치

//             0123456789012345678901
String str1 = "Hello Hello Hello love";

 

for (int i = 0; i < str1.length(); i++) { //모든 문자 다비교>>시간大

if( str1.charAt(i) == 'l' )

System.out.print( i + " " );} // 2 3 8 9 14 15 18

🔝str1에 있는 모든 'l'의 위치를 출력한 것이다. 모든 문자를 다 비교하기 때문에 시간이 길어지는 단점이 있다.

 indexOf("찾는 문자(열)",위치값) 

int p = -1;

do {

p = str1.indexOf("l", p+1); //0위치에서부터 찾기

if(p > -1) System.out.print (p + " ");

} while( p != -1 ); // 2 3 8 9 14 15 18

System.out.println( s2.indexOf("Mark") ); // 6 문자열 검색가능

System.out.println( s1.contains("순신") ); // true , 일부일치 ~를 포함하는(*=)

System.out.println( s1.equals("순신이") ); // false, 완전일치 String

System.out.println( s1.contentEquals("순신이") ); // false, 완전일치 String, StringBuilder

System.out.println( s1.contentEquals("Hello 李순신 123") ); // true

  • StringBuilder:thread사용금지
  • StringBuffer:thread safe 버전

String sa3 = null;

if(sa3 == null)

System.out.println("null 입니다");

else

System.out.println( sa3.indexOf('a') ); // ERROR▶java.lang.NullPointerException

문자열비교 ( ==로  비교하면 안됨)

String s1 = "Hello 李순신 123"; 

String s1_2 = "Hello 李순신 123";

System.out.println( s1 == s1_2); // true s1 == s1_2, 주소(위치)비교

System.out.println( s1.equals(s1_2) ); // true 문자열 data (글자값)비교

String s3 = "이순신";

String s4 = "이이";

 

boolean isSame = s3.equals(s4); // 문자열 data 비교

System.out.println( isSame ); // false

 

int eq = s3.compareTo( s4 ); // 위치결정

System.out.println( eq ); // -1368 : 사전순서상 이순신이 앞에 있기 떄문에 (이순신의 주소값)-(이이의 주소값)

                                       // "ABC1".compareTo("ABA") ⇒ "ABC1" - "ABA" = 2

String s5 = "Test123";

String s6 = "TEST123";

System.out.println( s5.equals(s6) ); // false

System.out.println( s5.compareTo(s6) ); // 32 ⇒ 대소문자 차이

System.out.println( s5.compareToIgnoreCase(s6) ); // // 대소문자 무시하고 비교 ⇒0 ⇒ 같다

String sa1 = "abcdef";

String sa2 = ""; //≠null

System.out.println( sa1.isEmpty() ); // false -> 빈문자열인가?

System.out.println( sa1.equals("") ); // false

System.out.println( sa2.isEmpty() ); // true

System.out.println( sa2.equals("") ); // true

 
문자열 조작(StringBuilder) - 속도가 비교적 빠르다
(String보단 빠르긴하지만 근래에는 문명의 발달로 속도차가 근소함)

// 문자열을 모두 대문자로 변경

System.out.println( s5.toUpperCase() );

 

// 문자열을 모두 소문자로 변경

System.out.println( s5.toLowerCase() );

 

// 문자열 결합

String s7 = s5 + "," + s6;

System.out.println( s7 );

String s8 = s7.concat("|").concat("Hello"); //더하기 함수버전>>Test123,TEST123|Hello

System.out.println( s8 );

StringBuilder sb = new StringBuilder(); // String sb;

sb.append( s8 ); // sb = sb + s8;

sb.append("---------------"); // sb = sb + "---------------"

System.out.println( sb.toString() ) ; //Test123,TEST123|Hello---------------

System.out.println( sb ) ; //Test123,TEST123|Hello---------------

문자열을 숫자로 변환

 

String sv1 = "124";

 

정수

int [] arr1 = new int[5]; // int 배열 5개 짜리

// 배열 - 실행할때 사이즈가 변하지 않는다

ArrayList<Integer> al1 = new ArrayList<Integer>();

// ArrayList - 실행할때 배열의 크기가 변경된다

Wrapper Class : Primitive Type(원시타입) -> Reference Type(참조 타입)
int          : value type(변수 타입)      Primitive type(기본형, 원시형) data자체가 정수
Integer  : reference type(참조타입)  int 의 Wrapper Class  
             ▶class(Primitive type data):int type에 기능을 추가한 것 
Integer.MAX_VALUE:214748....
수치형 문자열▶정수로 표현
String             ▶int
 "-124"           ▶ -124
Integer.parseInt("-124") ▶ -124
double  -> Double
byte    -> Byte

int v1 = Integer.parseInt( sv1 ); //parseInt: v1에 sv1을 Int로 리턴

Integer v2 = Integer.valueOf( sv1 ); //valueOf:Integer로 리턴

int v3 = Integer.valueOf( sv1 );

System.out.println( v1 );

System.out.println( v2.toString() ); // v2를 문자열로 바꿔라

System.out.println( v2 ); // .toString() 생략가능

 

실수

String sw1 = "124.567";

double w1 = Double.parseDouble( sw1 ); // 124.567

Double w2 = Double.valueOf( sw1 );

double w3 = Double.valueOf( sw1 ); // 자동형변환 implicit vs 수동형변환 explicit

System.out.println( w1 );

System.out.println( w2.toString() );

System.out.println( w3 );

 

// 숫자 -> 문자 String.valueOf()

int num1 = 123;

String snum1 = num1 + "";

String snum2 = String.valueOf( num1 );

 

double num2 = 123.456;

String snum3 = String.valueOf( num2 );

문자열을 문자배열로 변환
getBytes

byte [] bytes = {'H', 'e', 'l', 'l', 'o', ' ', 'J', 'a', 'v', 'a' };

String strbytes = new String ( bytes ); // String <- byte[]

System.out.println( bytes ); // [B@36aa7bc2 :배열의 위치의 hashcode (메모리 위치 16진수)

System.out.println( Arrays.toString( bytes ) );

//[72, 101, 108, 108, 111, 32, 74, 97, 118, 97]

System.out.println( strbytes ); //Hello Java

System.out.println( strbytes.toString() ); // "Hello Java"

//String strbytes2 = new String( bytes, 6, 4 );

String strbytes2 = new String( "Hello Java".getBytes() , 6, 4 ); //6의 위치에서 4개를 뽑아냄 (subString(44)을 대체 가능)

System.out.println( strbytes2 ); // 'Java'

문자열 바꾸기
replace

String sc1 = "Test123Test한글 영어 한글test";

String sc2 = sc1.replace("Test", "Example");

System.out.println( sc1 ); //Test123Test한글 영어 한글test

System.out.println( sc2 ); //Example123Example한글 영어 한글test

공백제거
trim

String sd1 = " Text Editor v1.0 ";

System.out.println( sd1 );

System.out.println( sd1.trim() ); //앞 뒤의 공백제거

System.out.println( sd1.length() ); // 34 , 내용의 글자수

System.out.println( sd1.trim().length() ); // 19 , trim한것의 공백수

날짜 및 시간 나타내기
      //               01234567890123
      String  jumin = "970508-2111020";

int year = Integer.parseInt("19" + jumin.substring(0, 2)); // 1997

int month = Integer.parseInt(jumin.substring(2, 4)); // 5

int dayOfMonth = Integer.parseInt(jumin.substring(4, 6)); // 8

LocalDateTime bDate

= LocalDateTime.of(year, month, dayOfMonth, 0, 0);

System.out.println("\n생일:" + bDate); // 생일:1997-05-08T00:00(UTC time)

 

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");

System.out.println("\n생일:" + bDate.format(fmt) ); // 생일:1997/05/08

 

String dayOfWeek = bDate.getDayOfWeek().toString(); // MONDAY

int dayOfWeekValue = bDate.getDayOfWeek().getValue(); // 1(월)~7(일)

// 0 1 2 3 4 5 6 7

String [] weekDay = {"", "월","화","수","목","금","토","일"};

System.out.println("\n요일:" + weekDay[dayOfWeekValue] + "요일");

System.out.println("\n요일:" + dayOfWeek + "요일");

성별 나타내기

int sex = Integer.parseInt( jumin.substring(7, 8) );

if (sex % 2 == 1)

System.out.println("남자");

else

System.out.println("여자");

숫자 표현
%d : decimal 10진 정수 
%x : hexa decimal 16진 정수
%f : 실수 float, double 
%c : char
%s : string
%5d 전체 5자리수 100 : 100__ 뒷쪽 공배 추가
%-5d 전체 5자리수 100 : __100 앞쪽 공백 추가 
%05d 100 : 00100 
%.3f 소수이하 3자리로 반올림 12.34567 : 12.346

long l = Math.round(12.34567); // 정수만 반올림한다

System.out.println("l=" + l); //12

String r = String.format("%.3f\n", 12.34567);

System.out.println( r ); //12.346

int num3 = 12;

String snum3_2 = String.format("%05d", num3);

System.out.println( snum3_2 ); //00012

DecimalFormat

 // 세자리마다 , 출력

// # : 숫자, 공백

// 0 : 숫자, 0

DecimalFormat df = new DecimalFormat("#,###,##0.00");

DecimalFormat df2 = new DecimalFormat("0,000,000.00");

double price1 = 12345678.789543;

System.out.println( "df=" + df.format(price1) ); // 12,345,678.79

System.out.println( "df2=" + df2.format(123) ); // 0,000,123.00

System.out.println( "df0="+ df.format(0) ); // 0.00

 

double price2 = 123456789.56789;

System.out.println( df.format(price2) ); // 123,456,789.57

System.out.println( df2.format(12.3456) ); // 0,000,012.35

~로 시작하는 지

String name1 = "김유신"; //"유제석";

System.out.println( name1.startsWith("김") ); // 김~

System.out.println( name1.contains("유") ); // 유~, ~유~, ~유

System.out.println( name1.endsWith("신") ); // ~신

//style [name^=김] startsWith //김~

//style [name^=유] contains //유~,~유~,~유

//style [name|=신] startsWith //~신

String [] names = new String [] {

"김유신", "이유신", "박유신", "최유신", "김순신",

"홍길동", "전우치", "김장군", "이장군", "박대장",

"유관순", "아이유", "제갈유지"

};

 

// "김" 으로 시작되는

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

if( names[i].startsWith("김") )

System.out.print( names[i] + " ");} //김유신 김순신 김장군

System.out.println();

// "유" 를 포함하는

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

if( names[i].contains("유") )

System.out.print( names[i] + " ");}//김유신 이유신 박유신 최유신 유관순 아이유 제갈유지

// 중간에 "유"가 있는 이름 출력

// 1.

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

if( names[i].indexOf("유") == 1 ) //1위치

System.out.print( names[i] + " " );}//김유신 이유신 박유신 최유신

// 2.

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

int idx = names[i].indexOf("유");

int lastIdx = names[i].length() - 1;

if( idx > 0 && idx != lastIdx )

System.out.print( names[i] + " "); //1의 위치가 아니더라도 찍음

/*

if (idx == -1) // "유"글자없음

if( idx == 0 ) // "유" 가 첫글자

if( idx == names[i].length()-1 ) // 마지막 글자가 "유"

*/

}//김유신 이유신 박유신 최유신 제갈유지

 

'JAVA' 카테고리의 다른 글

[java]ArrayList (자동배열)로 성적 입력 프로그램 만들기  (0) 2024.08.18
[java]정규식 (Regular Expression)  (0) 2024.08.17
[java] 주민등록번호, 사업자 등록번호 유효성 검사  (0) 2024.08.15
[java]배열 (Array)  (0) 2024.08.13
[java] 반복문 for 2  (0) 2024.08.12
'JAVA' 카테고리의 다른 글
  • [java]ArrayList (자동배열)로 성적 입력 프로그램 만들기
  • [java]정규식 (Regular Expression)
  • [java] 주민등록번호, 사업자 등록번호 유효성 검사
  • [java]배열 (Array)
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (150)
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (16)
      • 기타 (5)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (1)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    CSS
    HTML
    티스토리챌린지
    오블완
    일지
    SQL
    java
    link
    AJAX
    자기계발
    db
    JS
    input
    링크
    개발자
    tag
    부트캠프
    JQuery
    태그
    javascript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
라텐느
[java] String 함수 총정리
상단으로

티스토리툴바