반응형

     정보

    • 업무명     : 자바 문자열에 대한 유용한 방법

    • 작성자     : 이상호

    • 작성일     : 2020-04-07

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

    • Java 프로그래밍 언어는 원래 Sun Microsystems가 개발했으며 James Gosling이 시작하여 1995년 Sun Microsystems Java 플랫폼 (Java 1.0 J2SE)의 핵심 구성 요소로 발표하였습니다.

    • Java Standard Edition의 최신 버전은 Java SE 1.2입니다. Java의 개발과 광범위한 인기로 인해 다양한 유형의 플랫폼에 맞게 다양한 구성이 구성되었습니다.

    • 예를 들어 엔터프라이즈 애플리케이션용 J2EE, 모바일 애플리케이션용 J2ME뿐만 아니라 새로운 J2 버전은 각각 Java SE , Java EE 및 Java ME로 이름이 변경되었습니다.

    • 오늘 포스팅에서는 자바 문자열에 대한 유용한 방법을 소개해 드리고자 합니다.

     

     

    [장점]

    • 객체 지향

      • Java에서는 모든 것이 객체입니다. Java는 오브젝트 모델을 기반으로하기 때문에 쉽게 확장할 수 있습니다.

    • 플랫폼 독립적

      • 다른 많은 프로그래밍 언어 (C 및 C ++ 포함)와 달리 Java를 컴파일 할 때 플랫폼 특정 시스템으로 컴파일되지 않지만 플랫폼 독립적 바이트 코드로 컴파일됩니다. 이 바이트 코드는 웹을 통해 배포되며 실행되는 모든 플랫폼에서 가상 머신 (JVM)에 의해 구문 분석됩니다.

    • 간단함

      • Java는 배우기 쉽습니다. OOP Java의 기본 개념을 이해하면 쉽게 익힐 수 있습니다.

    • 보안

      • Java의 보안 기능 덕분에 바이러스가없고 변조가없는 시스템을 개발할 수 있습니다. 신원 확인 기술은 공개 키 암호화를 기반으로합니다.

    • 아키텍처 중립적

      • Java 컴파일러는 아키텍처 중립적 객체 파일 형식을 생성하여 많은 프로세서에서 컴파일 된 코드를 실행할 수 있으며 Java 런타임 시스템이 있습니다.

    • 이식성

      • 아키텍처가 중립적이고 사양 관련 구현이 없기 때문에 Java는 이식 가능합니다. Java의 컴파일러는 이식성 경계가 깨끗한 ANSI C로 작성되었으며 POSIX 하위 세트입니다.

    • 강력한

      • Java는 컴파일 타임 오류 검사 및 런타임 검사를 강조하여 오류가 발생하기 쉬운 상황을 해결하기 위해 노력합니다.

    • 멀티스레딩

      • Java의 멀티 스레딩 기능을 사용하면 많은 작업을 동시에 수행 할 수있는 프로그램을 작성할 수 있습니다. 이 디자인 기능을 통해 개발자는 원활하게 실행할 수있는 대화 형 응용 프로그램을 구축 할 수 있습니다.

    • 설명 언어

      • Java 바이트 코드는 즉시 기본 기계 명령어로 변환되며 어디에도 저장되지 않습니다. 링크는 점진적이고 가벼운 프로세스이므로 개발 프로세스가 더 빠르고 분석적입니다.

    • 고성능

      • Just In Time 컴파일러를 사용하여 Java가 고성능을 달성 할 수 있습니다.

    • Distributed

      • Java는 인터넷의 분산 환경을 위해 설계되었습니다.

    • 동적

      • Java는 변화하는 환경에 적응하도록 설계 되었기 때문에 C 또는 C ++보다 동적으로 간주됩니다. Java 프로그램은 많은 런타임 정보를 전달할 수 있으며 런타임시 오브젝트에 대한 액세스를 확인하고 해결하는 데 사용될 수 있습니다.

     

    [역사]

    • James Gosling은 1991년 06월에 수많은 셋톱 박스 프로젝트 중 하나에서 사용되는 Java 언어 프로젝트를 시작했습니다.

    • Sun은 1995년에 최초의 공개된 Java 1.0 구현을 발표했습니다. Write Once, Run Anywhere (WORA)를 약속하며 널리 사용되는 컴퓨터 플랫폼에서 실행됩니다.

    • 2006년 11월 13일 Sun은 GNU General Public License (GPL)의 조건에 따라 대부분의 Java를 무료 및 오픈 소스 소프트웨어로 출시했습니다.

    • 2007년 05월 08일 Sun은이 프로세스를 완료했습니다. Sun이 소유하지 않은 코드의 일부를 제외하고 모든 핵심 Java 코드는 무료이며 공개 소스입니다.

     

    [특징]

    • 웹 개발을 위해서 자바 (Java)기술이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 기술서

     

    [기능]

    • 자바 문자열에 대한 유용한 방법

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 없음

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • Java v1.8

    • Visual Studio Code v1.43.2

     

     세부 내용

    문자열을 비교하는 방법

    [compareTo 메서드를 사용하여 비교]

    • str.compareTo(string)str.compareToIgnoreCase(String)compareTo(object string) 문자열 클래스를 비교

    public class StringCompareEmp {
       public static void main(String args[]) {
          String str = "Hello World";
          String anotherString = "hello world";
          Object objStr = str;
    
          System.out.println(str.compareTo(anotherString));
          System.out.println(str.compareToIgnoreCase(anotherString));
          System.out.println(str.compareTo(objStr.toString()));
       }
    }

     

    -32
    0
    0

     

    [equals 메소드를 사용하여 비교]

    • equals를 통해 문자열 객체와 비교

    • 전달 인자 (s1, s4)가 다른 경우에 대해서만 false로 반환

    public class StringCompareequlA {
        public static void main(String[] args) {
            String s1 = "yiibai";
            String s2 = "yiibai";
            String s3 = new String("yiibai");
            String s4 = new String("Yiibai");
            
            System.out.println(s1.equals(s2));
            System.out.println(s2.equals(s3));
            System.out.println(s3.equals(s4));
        }
    }

     

    true
    true
    false

     

    [사용 == 비교]

    public class StringCompareequlB {
        public static void main(String[] args) {
            String s1 = "yiibai";
            String s2 = "yiibai";
            String s3 = new String("yiibai");
            String s4 = new String("Yiibai");
            
            System.out.println(s1 == s2);
            System.out.println(s2 == s3);
            System.out.println(s3 == s4);
        }
    }

     

    true
    false
    false

     

    지정된 문자열의 마지막 항목을 검색하는 방법
    • strOrig.lastIndexOf(Stringname)를 통해 문자열 내에서 지정된 문자열의 마지막을 검색

    public class SearchlastString {
        public static void main(String[] args) {
            String strOrig = "Hello world ,Hello Reader,Hello Sukida";
            int lastIndex = strOrig.lastIndexOf("Hello");
    
            if (lastIndex == -1) {
                System.out.println("Hello not found");
            } else {
                System.out.println("Last occurrence of Hello is at index "
                        + lastIndex);
            }
        }
    }

     

    Last occurrence of Hello is at index 26

     

    문자열에서 지정된 문자를 삭제하는 방법
    • removeCharAt(string,position)를 통해 문자열에서 지정된 문자를 삭제

    public class DeletingCharacter {
        public static void main(String args[]) {
            String str = "This is a Java grogram.";
            
            System.out.println(removeCharAt(str, 13));
        }
    
        public static String removeCharAt(String s, int pos) {
            return s.substring(0, pos) + s.substring(pos + 1);
        }
    }

     

    This is a Jav grogram.

     

    문자열의 하위 문자열을 변경하는 방법
    • replace는 java String 클래스의 메소드로서 지정된 문자열을 새로운 문자로 바꾸는 방법

    public class StringReplaceEmp {
        public static void main(String args[]) {
            String str = "Welcome to yiibai.com";
            
            System.out.println("Result 1:"+str.replace('W', 'H'));
            System.out.println("Result 2:"+str.replaceFirst("He", "Wo"));
            System.out.println("Result 3:"+str.replaceAll(".com", ".cn"));
        }
    }

     

    Result 1:Helcome to yiibai.com
    Result 2:Welcome to yiibai.com
    Result 3:We.cne to yiibai.cn

     

    문자열을 역전하는 방법
    • StringBuffer(String string)를 통해 입력 문자열을 버퍼링 및 반전시켜 문자열로 변환

    public class StringReverseExample {
        public static void main(String[] args) {
            String string = "abc123";
            String reverse = new StringBuffer(string).reverse().toString();
            
            System.out.println("String before reverse: " + string);
            System.out.println("String after reverse: " + reverse);
        }
    }

     

    String before reverse: abc123
    String after reverse: 321cba

     

    • 매개 변수에서 문자열 (input)을 반복문을 통해 거꾸로 출력

    public class StringReverseExample2 {
        public static void main(String[] args) {
            String input = "yiibai.com";
            char[] try1 = input.toCharArray();
            
            for (int i = try1.length - 1; i >= 0; i--)
                System.out.print(try1[i]);
        }
    }

     

    moc.iabiiy

     

    문자열에서 문구를 검색하는 방법
    • 문자열에서 단어의 위치값을 반환하는 indexOf를 사용하여 단어를 검색

    • 검색 결과가 없을 경우 -1을 반환

    public class SearchStringEmp {
        public static void main(String[] args) {
            String strOrig = "Hello, Sukida";
            int intIndex = strOrig.indexOf("Su");
    
            if (intIndex == -1) {
                System.out.println("Su not found");
            } else {
                System.out.println("Found Su at index : " + intIndex);
            }
        }
    }

     

    Found Su at index : 7

     

    • String 객체에서 contains를 통해 단어를 검색

    public class SearchStringEmp2 {
        public static void main(String[] args) {
            String text = "This is my dog, it is name PigPig";
            
            System.out.print("Is found the word ? " + text.contains("dog"));
        }
    }

     

    Is found the word ? true

     

    문자열을 여러 개의 하위 문자열로 나누는 방법
    • split(string)를 통해 문자열 및 구분자 (-, \\.)로부터 여러 하위 문자열로 분할

    • 구분자가 공백의 경우 \\s를 사용

    public class JavaStringSplitEmp {
        public static void main(String args[]) {
            String str = "this-is-my-dog";
            String[] temp;
            String[] temp2;
            String delimeter = "-";
            temp = str.split(delimeter);
    
            for (int i = 0; i < temp.length; i++) {
                System.out.println(temp[i]);
            }
    
            System.out.println("--------------- line -----------------");
            str = "max.min.avg.sum";
            delimeter = "\\.";
            temp2 = str.split(delimeter);
            for (int i = 0; i < temp2.length; i++) {
                System.out.println(temp2[i]);
    
            }
        }
    }

     

    this
    is
    my
    dog
    --------------- line -----------------
    max
    min
    avg
    sum

     

    문자열을 대문자로 완전히 변환하는 방법
    • String 클래스의 toUpperCase를 통해 대문자로 변경

    public class StringToUpperCaseEmp {
        public static void main(String[] args) {
            String str = "string 123 ab1 Sukida toupperCase ";
            String strUpper = str.toUpperCase();
            
            System.out.println("Original String: " + str);
            System.out.println("String changed to upper case: " + strUpper);
        }
    }

     

    Original String: string 123 ab1 Sukida toupperCase 
    String changed to upper case: STRING 123 AB1 SUKIDA TOUPPERCASE

     

    문자열의 영역을 일치시키는 방법
    • regionMatches을 통해 두 문자열의 영역이 일치 확인

    • 해당 전달 인자에 대한 설명

      • 11 : 비교가 시작되는 문자열의 인덱스

      • second_str : 대상 문자열

      • 12 : 대상 문자열과 비교할 인덱스

      • 3 : 비교할 문자수

    public class StringRegionMatch {
        public static void main(String[] args) {
            String first_str = "Welcome to IBM";
            String second_str = "I work with IBM";
    
            boolean match = first_str.regionMatches(11, second_str, 12, 3);
            System.out.println("first_str[11->14] == " + "second_str[12 -> 15]: "
                    + match);
        }
    }

     

    first_str[11->14] == second_str[12 -> 15]: true

     

    두 문자열의 생성 성능을 비교하는 방법
    • 2가지 서로 다른 방식 (String literals vs String objects)으로 생성된 문자열의 성능을 비교

    public class StringComparePerformance {
        public static void main(String[] args) {
            long startTime = System.currentTimeMillis();
    
            for (int i = 0; i < 50000; i++) {
                String s1 = "This is a String";
                String s2 = "This is a String";
            }
            
            long endTime = System.currentTimeMillis();
            System.out.println("Time taken for creation" + " of String literals : "
                    + (endTime - startTime) + " milli seconds");
            long startTime1 = System.currentTimeMillis();
    
            for (int i = 0; i < 50000; i++) {
                String s3 = new String("This is a String");
                String s4 = new String("This is a String");
            }
            
            long endTime1 = System.currentTimeMillis();
            System.out.println("Time taken for creation" + " of String objects : "
                    + (endTime1 - startTime1) + " milli seconds");
        }
    }

     

    Time taken for creation of String literals : 0 milli seconds
    Time taken for creation of String objects : 16 milli seconds

     

    문자열 생성을 최적화하는 방법
    • literalsnew StringString.intern를 통해 문자열 생성

    public class StringOptimization {
        public static void main(String[] args) {
            String variables[] = new String[50000];
            for (int i = 0; i < 50000; i++) {
                variables[i] = "s" + i;
            }
            
            long startTime0 = System.currentTimeMillis();
    
            for (int i = 0; i < 50000; i++) {
                variables[i] = "hello";
            }
            
            long endTime0 = System.currentTimeMillis();
            System.out.println("Creation time" + " of String literals : "
                    + (endTime0 - startTime0) + " ms");
            long startTime1 = System.currentTimeMillis();
    
            for (int i = 0; i < 50000; i++) {
                variables[i] = new String("hello");
            }
            
            long endTime1 = System.currentTimeMillis();
            System.out.println("Creation time of"
                    + " String objects with 'new' key word : "
                    + (endTime1 - startTime1) + " ms");
            long startTime2 = System.currentTimeMillis();
    
            for (int i = 0; i < 50000; i++) {
                variables[i] = new String("hello");
                variables[i] = variables[i].intern();
            }
            
            long endTime2 = System.currentTimeMillis();
            System.out.println("Creation time of"
                    + " String objects with intern(): " + (endTime2 - startTime2)
                    + " ms");
        }
    }

     

    Creation time of String literals : 0 ms
    Creation time of String objects with 'new' key word : 0 ms
    Creation time of String objects with intern(): 15 ms

     

    문자열을 포맷하는 방법
    • format를 통해 형식화된 문자열로 반환

    public class StringFormat {
        public static void main(String[] args) {
            double e = Math.E;
            
            System.out.format("%f%n", e);
            System.out.format(Locale.GERMANY, "%-10.4f%n%n", e);
        }
    }

     

    2.718282
    2,7183

     

    두 줄을 연결하는 방법
    • + 연산자 및 StringBuffer.append를 사용하여 문자열 연결

    public class StringConcatenate {
        public static void main(String[] args) {
            long startTime = System.currentTimeMillis();
    
            for (int i = 0; i < 99999; i++) {
                String result = "This is" + "testing the" + "difference"
                        + "between" + "String" + "and" + "StringBuffer";
            }
            long endTime = System.currentTimeMillis();
            System.out.println("Time taken for string"
                    + "concatenation using + operator : " + (endTime - startTime)
                    + " ms");
            long startTime1 = System.currentTimeMillis();
    
            for (int i = 0; i < 99999; i++) {
                StringBuffer result = new StringBuffer();
                result.append("This is");
                result.append("testing the");
                result.append("difference");
                result.append("between");
                result.append("String");
                result.append("and");
                result.append("StringBuffer");
            }
            long endTime1 = System.currentTimeMillis();
            System.out.println("Time taken for String concatenation"
                    + "using StringBuffer : " + (endTime1 - startTime1) + " ms");
        }
    }

     

    Time taken for stringconcatenation using + operator : 0 ms
    Time taken for String concatenationusing StringBuffer : 47 ms

     

    문자열의 유니 코드를 얻는 방법
    • codePointBefore를 사용하여 지정된 인덱스 앞에 문자 (Unicode 코드 포인트)를 반환

    public class StringUniCode {
        public static void main(String[] args) {
            String test_string = "Welcome to Yiibai.com";
            System.out.println("String under test is = " + test_string);
    
            System.out.println("Unicode code point at"
                    + " position 15 in the string is = "
                    + test_string.codePointBefore(15));
        }
    }

     

    String under test is = Welcome to Yiibai.com
    Unicode code point at position 5 in the string is = 98

     

    문자열을 버퍼링하는 방법
    • 문자열을 버퍼링하여 emit를 사용

    public class StringBuffer {
        public static void main(String[] args) {
            countTo_N_Improved();
        }
    
        private final static int MAX_LENGTH = 30;
        private static String buffer = "";
    
        private static void emit(String nextChunk) {
            if (buffer.length() + nextChunk.length() > MAX_LENGTH) {
                System.out.println(buffer);
                buffer = "";
            }
            buffer += nextChunk;
        }
    
        private static final int N = 100;
    
        private static void countTo_N_Improved() {
            for (int count = 2; count <= N; count = count + 2) {
                emit(" " + count);
            }
        }
    }

     

     2 4 6 8 10 12 14 16 18 20 22
     24 26 28 30 32 34 36 38 40 42
     44 46 48 50 52 54 56 58 60 62
     64 66 68 70 72 74 76 78 80 82

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기