CodeGym /Java Blog /무작위의 /Java의 하위 문자열
John Squirrels
레벨 41
San Francisco

Java의 하위 문자열

무작위의 그룹에 게시되었습니다
Java에서 String 에 대한 가장 인기 있는 작업은 연결, 인덱스별로 문자 가져오기 및 하위 문자열 가져오기입니다. 이 기사에서는 Java 하위 문자열 방법에 대해 설명합니다.

Java 하위 문자열이란 무엇입니까?

일반적으로 Java 하위 문자열은 문자열 내부의 연속적인 문자 시퀀스입니다. 문자열의 일부일 수도 있고 전체 문자열일 수도 있습니다. Java의 하위 문자열 - 2Java에서 하위 문자열이란 무엇입니까? 이 언어에는 Java 메서드 오버로딩 덕분에 substring() 메서드 또는 두 개의 메서드가 있습니다. Java 프로그램에서 하위 문자열을 가져오는 데 사용할 수 있습니다. 첫 번째 Java 하위 문자열 방법은 String substring(firstIndex) 이고 두 번째 방법은 String substring (firstIndex, lastIndex) 입니다 .

Java에서 하위 문자열을 사용하는 방법

답은 간단합니다. 하위 문자열을 사용하면 됩니다. Java substring() 메서드는 문자열의 일부를 반환합니다. 이를 위해 사용할 수 있는 두 가지 방법이 있습니다.
하위 문자열 메서드의 구문 문자열 하위 문자열(firstIndex) 문자열 하위 문자열(firstIndex, lastIndex)
인수 firstIndex 는 하위 문자열의 첫 번째 인덱스인 문자열의 숫자입니다. 포함한. 하위 문자열의 마지막 숫자는 전체 문자열의 마지막 숫자입니다. firstIndex 는 하위 문자열의 첫 번째 인덱스인 문자열의 숫자입니다. 포함한.
lastIndex 는 하위 문자열에서 제외된 문자열의 번호입니다.
Java에서 하위 문자열을 사용하는 방법의 예

String s = "CodeGym";
System.out.println(s.substring(4));
//returns Gym

String s = "CodeGym"; 
System.out.println(s.substring(2,5));
//returns deG
이해하는 데 도움이 되는 매우 인기 있는 작업
  • Java에서 하위 문자열을 얻는 방법
  • 주어진 문자열의 모든 하위 문자열을 찾는 방법
  • 가장 긴 공통 하위 문자열을 찾는 방법

Java에서 하위 문자열을 얻는 방법(특정)

이 첫 번째 Java 하위 문자열 예제는 매우 쉽습니다. 문자열이 있고 그 안에서 하위 문자열 "CodeGym"을 찾아야 합니다. Java에서 하위 문자열을 얻는 방법을 이미 알고 있습니다. 따라서 이 특정 문제에 대한 해결책은 다음과 같습니다.

import java.io.IOException;

public class Main {

   public static void main(String[] args) throws IOException {

       String s1 = "the best Java Core course is CourseCodeGym.  End of story";
       String myTarget = "CodeGym";
       int index1 = s1.indexOf(myTarget);
      
       int index2 = index1 + myTarget.length();
       System.out.println(s1.substring(index1, index2));

   }
}
결과는 다음과 같습니다. 종료 코드 0으로 종료된 CodeGym 프로세스 주어진 문자열의 모든 부분 문자열을 찾는 방법 주어진 문자열의 모든 부분 문자열을 찾는 가장 간단한 방법이 있습니다.

import java.io.IOException;
public class Main {
   public static void main(String[] args) throws IOException {
       String myTarget = "CodeGym";
       for (int i = 0; i < myTarget.length(); i++) {
           for (int j = i + 1; j <= myTarget.length(); j++) {
               System.out.println(myTarget.substring(i, j));
           }
       }    
   }
}
결과는 다음과 같습니다. C Co Cod Code CodeG CodeGy CodeGym o od ode odeG odeGy odeGym d deG deGy deGym e eG eGy eGym G Gy Gym y ym m 프로세스가 종료 코드 0으로 종료됨 가장 긴 공통 부분 문자열을 찾는 방법 가장 긴 공통 부분 문자열 문제 컴퓨터 과학에서 가장 인기 있는 작업 중 하나입니다. 꽤 높은 확률로 주니어 개발자 인터뷰에서 만날 수 있습니다. 어쨌든 풀기 위해 노력하십시오. 초보자 프로그래머에게 매우 유용한 연습입니다. 가장 긴 공통 하위 문자열 문제는 둘 이상의 문자열의 하위 문자열(또는 하위 문자열)인 가장 긴 문자열(또는 그 중 몇 개)을 찾는 것을 의미합니다. 예를 들어 두 개의 문자열이 있습니다.

String first = "CodeGym" 
String second = "SomeGym"
출력은 다음과 같아야 합니다. eGym 따라서 문자열 "first"와 "second"를 입력해야 합니다. 가장 긴 공통 하위 문자열을 인쇄합니다. 둘 이상의 하위 문자열이 가장 긴 공통 하위 문자열에 대해 동일한 값을 갖는 경우 그 중 하나를 인쇄합니다. 이 문제를 직접 해결하고 그 후에 아래 코드를 살펴보는 것이 좋습니다.

public class SubStringTest {

   //  in this method we are looking for the Longest common substring of
   // first String with length = m  and the second String with length = n
   public static String longestCS(String first, String second, int m, int n) {
       // the maximal length
       int maxLength = 0;
       // the last index of the longest common substring
       int endIndex = m;

       // array stores the length of substring
       int[][] keeper = new int[m + 1][n + 1];

       for (int i = 1; i <= m; i++) {
           for (int j = 1; j <= n; j++) {
               // check if current characters of first and second strings match
               if (first.charAt(i - 1) == second.charAt(j - 1)) {
                   keeper[i][j] = keeper[i - 1][j - 1] + 1;
                  
                   if (keeper[i][j] > maxLength) {
                       maxLength = keeper[i][j];
                       endIndex = i;
                   }
               }
           }
       }
       return first.substring(endIndex - maxLength, endIndex);
   }


   public static void main(String[] args) {
       String first = "CodeGym";
       String second = "SomeGym";
       int m = first.length(), n = second.length();
       System.out.println("The longest common substring = " + longestCS(first, second, m, n));
   }
}
출력은 다음과 같습니다. 가장 긴 공통 하위 문자열 = eGym

하위 문자열은 Java에서 어떻게 작동합니까?

JDK 7 및 최신 버전에서 substring()은 JDK 6 이전 버전에서와 같이 생성된 문자 배열의 문자 수를 더 이상 계산하지 않고 단순히 메모리(힙)에 새 배열을 생성하고 이를 참조합니다. . 다음은 예입니다.

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
따라서 JDK 7 이상에서 개체 x 에 적용된 substring() 메서드 의 결과로 생성된 개체 yz는 새로 생성된 두 개의 배열(힙에서)을 참조합니다. - {d,e, G, y} for yz 에 대한 {C, o} . 메서드 하위 문자열의 JDK 7+ 버전에서 이 두 개의 새 줄(즉, 두 개의 새 문자 배열)은 원래 문자열 myLongString ({C, o, d, e, G, y, m, i, s, t, h, e, b,e,s,t} 배열 형식) .

하위 문자열의 JDK 6 버전

오늘날에도 일부 큰 프로젝트에서 JDK의 레거시 코드 기반을 6번 만날 수 있습니다. JDK 6에서는 substring() 메서드가 다른 방식으로 작동합니다. 아시다시피 String 은 불변 클래스이며 하위 문자열을 얻기 위해 Java는 JDK 6 초기에 이 불변성을 사용했습니다. 내부에 있는 String 유형의 객체는 문자 배열이거나 문자 배열을 포함합니다. JDK 6 당시에는 두 개의 변수가 더 저장되었습니다. 문자 배열의 첫 번째 문자 수와 그 양입니다. 따라서 JDK 6에서 String에는 char 값[] (문자 배열), int offset (배열의 첫 번째 문자 인덱스) 및 int count 의 세 필드가 있습니다.(배열의 문자 수). JDK 6에서 하위 문자열이 생성되면 문자 배열이 새 String 개체에 복사되지 않습니다. 대신 두 개체 모두 동일한 문자 배열에 대한 참조를 저장합니다. 그러나 두 번째 객체는 두 개의 변수를 더 저장합니다. 첫 번째는 하위 문자열의 기호이고 두 번째는 하위 문자열에 얼마나 많은 기호가 있는지에 관한 것입니다. 메모리 누수 문제로 인해 JDK 6 방식으로 대체되었습니다. 무슨 뜻이에요? string 이 있다고 가정 x하고 substring을 사용하여 두 개의 하위 문자열을 만듭니다.

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
이제 우리는 힙이라는 특별한 메모리 영역에 저장된 객체 x 와 동일한 객체 x 를 참조하는 두 객체 yz 를 가지고 있습니다 . x 만 두 번째부터 여섯 번째까지의 요소를 참조하고 z는 0부터 세 번째까지의 x 요소를 참조합니다 . 원래 객체 x가 이미 사용되었고 참조 없이 남겨진 경우 어떻게 됩니까? 프로그램에서 다른 모든 개체는 yz 와만 작동합니다. 이 경우 가비지 수집기는 객체 x 를 파괴할 수 있습니다., 메모리 배열은 남아 있고 y 및 z에서 사용됩니다. 메모리 누수가 발생합니다. 따라서 최신 JDK 7 이상 버전의 방법은 메모리 사용 측면에서 비용이 많이 듭니다. 그러나 메모리 누수를 방지할 수 있습니다. 또한 새 방법은 문자 수를 계산할 필요가 없기 때문에 더 빠르게 작동합니다. 배운 내용을 보강하려면 Java 과정에서 비디오 강의를 시청하는 것이 좋습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION