[Java] 자바 문자열에 대한 유용한 방법

 정보

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

  • 작성자     : 이상호

  • 작성일     : 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로 이름이 변경되었습니다.

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

 

etc-image-0

 

[장점]

  • 객체 지향

    • 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

 

 

 

 

 

 

본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음