java
Java는 정규 표현식과의 패턴 일치를 위해 java.util.regex 패키지를 제공합니다. Java 정규식은 Perl 프로그래밍 언어와 매우 유사하고 배우기 쉽습니다.
정규식은 패턴에 포함된 특수 구문을 사용하여 다른 문자열이나 문자열 집합을 일치시키거나 찾는 데 도움이 되는 특수 문자 시퀀스입니다. 텍스트와 데이터를 검색, 편집 또는 조작하는 데 사용할 수 있습니다.
java.util.regex 패키지는 주로 다음 세 가지 클래스로 구성됩니다. -
패턴 클래스 - Pattern 객체는 정규 표현식의 컴파일된 표현입니다. Pattern 클래스는 공용 생성자를 제공하지 않습니다. 패턴을 생성하려면 먼저 public static compile() 중 하나를 호출해야 합니다. 그런 다음 Pattern 개체를 반환합니다. 이 메서드는 정규식을 첫 번째 인수로 허용합니다.
매처 클래스 - Matcher 개체는 패턴을 해석하고 입력 문자열에 대해 일치 작업을 수행하는 엔진입니다. Pattern 클래스와 마찬가지로 Matcher는 공용 생성자를 정의하지 않습니다. matcher()를 호출하여 Matcher 객체를 얻습니다. 패턴 개체의 메서드입니다.
패턴 구문 예외 − PatternSyntaxException 객체는 정규식 패턴의 구문 오류를 나타내는 확인되지 않은 예외입니다.
그룹 캡처는 여러 문자를 단일 단위로 취급하는 방법입니다. 그룹화할 문자를 괄호 세트 안에 배치하여 생성됩니다. 예를 들어, 정규식(dog)은 "d", "o" 및 "g" 문자를 포함하는 단일 그룹을 생성합니다.
캡처 그룹은 여는 괄호를 왼쪽에서 오른쪽으로 세어 번호가 매겨집니다. 예를 들어 식 ((A)(B(C)))에는 4개의 그룹이 있습니다. -
표현식에 몇 개의 그룹이 있는지 확인하려면 matcher 객체에서 groupCount 메서드를 호출하십시오. groupCount 메서드는 int를 반환합니다. 매처의 패턴에 존재하는 캡처링 그룹의 수를 보여줍니다.
항상 전체 표현식을 나타내는 특수 그룹인 그룹 0도 있습니다. 이 그룹은 groupCount에서 보고한 총계에 포함되지 않습니다.
예
다음 예는 주어진 영숫자 문자열에서 숫자 문자열을 찾는 방법을 보여줍니다 -
라이브 데모import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ) { // String to be scanned to find the pattern. String line = "This order was placed for QT3000! OK?"; String pattern = "(.*)(\\d+)(.*)"; // Create a Pattern object Pattern r = Pattern.compile(pattern); // Now create matcher object. Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Found value: " + m.group(0) ); System.out.println("Found value: " + m.group(1) ); System.out.println("Found value: " + m.group(2) ); }else { System.out.println("NO MATCH"); } } }
이것은 다음 결과를 생성합니다 -
출력
Found value: This order was placed for QT3000! OK? Found value: This order was placed for QT300 Found value: 0
다음은 Java에서 사용할 수 있는 모든 정규식 메타문자 구문을 나열한 표입니다.
하위 표현식 | 일치 |
---|---|
^ | 줄의 시작 부분과 일치합니다. |
$ | 줄의 끝과 일치합니다. |
. | 개행 문자를 제외한 모든 단일 문자와 일치합니다. m 사용 옵션을 사용하면 줄 바꿈과도 일치할 수 있습니다. |
[...] | 대괄호 안의 모든 단일 문자와 일치합니다. |
[^...] | 대괄호가 아닌 모든 단일 문자와 일치합니다. |
\A | 전체 문자열의 시작. |
\z | 전체 문자열의 끝. |
\Z | 허용되는 마지막 줄 종결자를 제외한 전체 문자열의 끝입니다. |
재* | 이전 표현식의 0개 이상의 항목과 일치합니다. |
보충+ | 이전 항목 중 하나 이상과 일치합니다. |
다시? | 이전 표현식의 0 또는 1번과 일치합니다. |
재{ n} | 앞의 표현식과 정확히 n번 일치합니다. |
다시{n,} | 이전 표현식의 n개 이상의 항목과 일치합니다. |
다시{n, m} | 이전 표현식의 최소 n개 및 최대 m개 항목과 일치합니다. |
a| b | 또는 b와 일치합니다. |
(재) | 정규 표현식을 그룹화하고 일치하는 텍스트를 기억합니다. |
(?:다시) | 일치하는 텍스트를 기억하지 않고 정규 표현식을 그룹화합니다. |
(?> 다시) | 역추적 없이 독립 패턴과 일치합니다. |
\w | 단어 문자와 일치합니다. |
\W | 비단어 문자와 일치합니다. |
\s | 공백과 일치합니다. [\t\n\r\f]와 동일합니다. |
\S | 공백이 아닌 것과 일치합니다. |
\d | 숫자와 일치합니다. [0-9]와 동일합니다. |
\D | 숫자가 아닌 것과 일치합니다. |
\A | 문자열의 시작 부분과 일치합니다. |
\Z | 문자열의 끝과 일치합니다. 개행이 존재하면 개행 직전과 일치합니다. |
\z | 문자열의 끝과 일치합니다. |
\G | 마지막 경기가 끝난 지점과 일치합니다. |
\n | 캡처 그룹 번호 "n"에 대한 역참조 |
\b | 대괄호 밖에 있을 때 단어 경계와 일치합니다. 대괄호 안에 있을 때 백스페이스(0x08)와 일치합니다. |
\B | 단어가 아닌 경계와 일치합니다. |
\n, \t 등 | 줄 바꿈, 캐리지 리턴, 탭 등과 일치합니다. |
\Q | \E까지의 모든 문자를 이스케이프(따옴표)합니다. |
\E | \Q로 시작된 인용을 끝냅니다. |
다음은 유용한 인스턴스 메소드 목록입니다 -
인덱스 메서드는 입력 문자열에서 일치 항목이 발견된 위치를 정확하게 표시하는 유용한 인덱스 값을 제공합니다. −
Sr.No. | 방법 및 설명 |
---|---|
1 | 공개 int 시작() 이전 일치의 시작 인덱스를 반환합니다. |
2 | 공개 int 시작(int 그룹) 이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 시작 인덱스를 반환합니다. |
3 | 공개 int end() 일치하는 마지막 문자 이후의 오프셋을 반환합니다. |
4 | 공개 int end(int 그룹) 이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 마지막 문자 뒤의 오프셋을 반환합니다. |
연구 방법은 입력 문자열을 검토하고 패턴이 발견되었는지 여부를 나타내는 부울을 반환합니다. -
Sr.No. | 방법 및 설명 |
---|---|
1 | 공개 부울 lookAt() 패턴에 대해 영역의 시작 부분에서 시작하여 입력 시퀀스를 일치시키려고 시도합니다. |
2 | 공개 부울 찾기() 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고 시도합니다. |
3 | 공개 부울 찾기(int 시작) 이 매처를 재설정한 다음 지정된 인덱스에서 시작하여 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고 시도합니다. |
4 | 공개 부울 일치() 패턴에 대해 전체 영역을 일치시키려고 시도합니다. |
교체 방법은 입력 문자열의 텍스트를 교체하는 데 유용한 방법입니다 -
Sr.No. | 방법 및 설명 |
---|---|
1 | 공개 Matcher appendReplacement(StringBuffer sb, 문자열 교체) 비터미널 추가 및 바꾸기 단계를 구현합니다. |
2 | 공개 StringBuffer appendTail(StringBuffer sb) 터미널 추가 및 바꾸기 단계를 구현합니다. |
3 | 공개 문자열 replaceAll(문자열 대체) 패턴과 일치하는 입력 시퀀스의 모든 하위 시퀀스를 주어진 대체 문자열로 바꿉니다. |
4 | 공개 문자열 replaceFirst(문자열 대체) 패턴과 일치하는 입력 시퀀스의 첫 번째 하위 시퀀스를 주어진 대체 문자열로 바꿉니다. |
5 | 공개 정적 문자열 quoteReplacement(문자열 s) 지정된 문자열에 대한 리터럴 대체 문자열을 반환합니다. 이 메서드는 리터럴 대체 s로 작동하는 문자열을 생성합니다. Matcher 클래스의 appendReplacement 메소드에서. |
다음은 "cat"이라는 단어가 입력 문자열에 나타나는 횟수를 계산하는 예입니다 -
예
라이브 데모import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { private static final String REGEX = "\\bcat\\b"; private static final String INPUT = "cat cat cat cattie cat"; public static void main( String args[] ) { Pattern p = Pattern.compile(REGEX); Matcher m = p.matcher(INPUT); // get a matcher object int count = 0; while(m.find()) { count++; System.out.println("Match number "+count); System.out.println("start(): "+m.start()); System.out.println("end(): "+m.end()); } } }
이것은 다음 결과를 생성합니다 -
출력
Match number 1 start(): 0 end(): 3 Match number 2 start(): 4 end(): 7 Match number 3 start(): 8 end(): 11 Match number 4 start(): 19 end(): 22
이 예제에서는 단어 경계를 사용하여 "c" "a" "t" 문자가 더 긴 단어의 하위 문자열이 아님을 확인할 수 있습니다. 또한 입력 문자열에서 일치가 발생한 위치에 대한 유용한 정보를 제공합니다.
start 메서드는 이전 일치 작업 동안 지정된 그룹이 캡처한 하위 시퀀스의 시작 인덱스를 반환하고 end는 일치하는 마지막 문자의 인덱스에 1을 더한 인덱스를 반환합니다.
match 및 lookAt 메서드는 모두 패턴에 대해 입력 시퀀스를 일치시키려고 시도합니다. 그러나 차이점은 일치에는 전체 입력 시퀀스가 일치해야 하지만 lookAt에는 일치하지 않는다는 점입니다.
두 방법 모두 항상 입력 문자열의 시작 부분에서 시작합니다. 다음은 기능을 설명하는 예입니다 -
예
라이브 데모import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { private static final String REGEX = "foo"; private static final String INPUT = "fooooooooooooooooo"; private static Pattern pattern; private static Matcher matcher; public static void main( String args[] ) { pattern = Pattern.compile(REGEX); matcher = pattern.matcher(INPUT); System.out.println("Current REGEX is: "+REGEX); System.out.println("Current INPUT is: "+INPUT); System.out.println("lookingAt(): "+matcher.lookingAt()); System.out.println("matches(): "+matcher.matches()); } }
이것은 다음 결과를 생성합니다 -
출력
Current REGEX is: foo Current INPUT is: fooooooooooooooooo lookingAt(): true matches(): false
replaceFirst 및 replaceAll 메서드는 주어진 정규식과 일치하는 텍스트를 바꿉니다. 이름에서 알 수 있듯이 replaceFirst는 첫 번째 항목을 대체하고 replaceAll은 모든 항목을 대체합니다.
다음은 기능을 설명하는 예입니다 -
예
라이브 데모import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { private static String REGEX = "dog"; private static String INPUT = "The dog says meow. " + "All dogs say meow."; private static String REPLACE = "cat"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); // get a matcher object Matcher m = p.matcher(INPUT); INPUT = m.replaceAll(REPLACE); System.out.println(INPUT); } }
이것은 다음 결과를 생성합니다 -
출력
The cat says meow. All cats say meow.
Matcher 클래스는 텍스트 교체를 위한 appendReplacement 및 appendTail 메서드도 제공합니다.
다음은 기능을 설명하는 예입니다 -
예
라이브 데모import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { private static String REGEX = "a*b"; private static String INPUT = "aabfooaabfooabfoob"; private static String REPLACE = "-"; public static void main(String[] args) { Pattern p = Pattern.compile(REGEX); // get a matcher object Matcher m = p.matcher(INPUT); StringBuffer sb = new StringBuffer(); while(m.find()) { m.appendReplacement(sb, REPLACE); } m.appendTail(sb); System.out.println(sb.toString()); } }
이것은 다음 결과를 생성합니다 -
출력
-foo-foo-foo-
PatternSyntaxException은 정규식 패턴의 구문 오류를 나타내는 확인되지 않은 예외입니다. PatternSyntaxException 클래스는 무엇이 잘못되었는지 판별하는 데 도움이 되는 다음 메소드를 제공합니다 -
Sr.No. | 방법 및 설명 |
---|---|
1 | 공개 문자열 getDescription() 오류에 대한 설명을 검색합니다. |
2 | 공개 int getIndex() 오류 인덱스를 검색합니다. |
3 | 공개 문자열 getPattern() 잘못된 정규식 패턴을 검색합니다. |
4 | 공개 문자열 getMessage() 구문 오류 및 해당 인덱스에 대한 설명, 잘못된 정규식 패턴 및 패턴 내 오류 인덱스의 시각적 표시를 포함하는 여러 줄 문자열을 반환합니다. |
java
자바 컬렉션 인터페이스 이 튜토리얼에서는 Java Collection 인터페이스와 그 하위 인터페이스에 대해 알아볼 것입니다. Collection interface는 Java 컬렉션 프레임워크의 루트 인터페이스입니다. 이 인터페이스의 직접적인 구현은 없습니다. 그러나 List와 같은 하위 인터페이스를 통해 구현됩니다. , Set , 및 Queue . 예를 들어, ArrayList 클래스는 List를 구현합니다. Collection의 하위 인터페이스인 인터페이스 인터페이스. 컬렉션의 하위 인터페이스 위에서 언급했듯이 C
자바 목록 이 자습서에서는 Java의 List 인터페이스와 해당 메서드에 대해 알아봅니다. 자바에서 List 인터페이스는 요소를 순차적으로 저장하고 액세스할 수 있도록 하는 정렬된 컬렉션입니다. Collection 확장 인터페이스. 목록을 구현하는 클래스 List 이후 인터페이스이므로 개체를 만들 수 없습니다. List의 기능을 사용하려면 인터페이스에서 다음 클래스를 사용할 수 있습니다. 배열 목록 링크드리스트 벡터 스택 이 클래스는 Collections 프레임워크에 정의되어 있으며 List 인터페이스. 목록은 어