문자열이 있는데, 거기에 y와 f 문자가 있는지 어떻게 확인하나요? 가장 어두운 방법은 다음과 같습니다.
프로그램 1: if, for 문 및 charAt()
class Test{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; char x='y'; char y='f'; boolean result=false; for(int i=0;i<str.length;i++){ char z=str.charAt(i); //System.out.println(z); if(x==z||y==z) { result=true; break; } else result=false; } System.out.println(result); } }
매우 직관적인 것처럼 보이지만 이 방법은 대처하기 어렵습니다. 복잡성. 예를 들어, 텍스트에 이 있는지 쿼리해 보세요. 무슨 일이 있거나 팅 등등이 있나요? 그것은 불쾌한 직업입니다.
Java의 java.util.regex 패키지
객체지향 개념에 따르면 is, thing, ting 등 쿼리하려는 문자열을 객체로 캡슐화하고, 이 객체는 일치하는 템플릿으로 사용됩니다. 텍스트 단락이 더욱 자연스러워집니다. 템플릿 역할을 하는 것은 아래에서 설명할 정규식입니다. 복잡성을 무시하고 예를 살펴보겠습니다. 프로그램 2: 이해가 안 됩니다. 먼저 살펴볼까요?
import java.util.regex.*; class Regex1{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean result=m.find(); System.out.println(result); } }
str이 regEx와 일치하면 결과는 true이고, 그렇지 않으면 false입니다. 검색 시 대소문자를 무시하고 싶다면 다음과 같이 쓸 수 있습니다:
Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
비록 패턴은 모르지만(템플릿, 패턴 ) 및 Matcher(매처)의 세부 사항을 사용하면 프로그램이 더 편안해집니다. is를 먼저 쿼리한 다음 thing 또는 ting을 쿼리하는 경우 if 문과 for 문을 고려하거나 charAt를 통해 템플릿 패턴만 수정하면 됩니다. () .
1. 특수 문자열(a|f와 같은 정규 표현식)을 작성합니다.
2. 정규 표현식을 템플릿으로 컴파일합니다: p
3. 템플릿 p를 사용하여 문자열 str과 일치시킵니다.
아이디어는 분명합니다. 이제 Java가 이를 어떻게 처리하는지 살펴보겠습니다. (Java 프로그래머는 JDK1.4까지 이 클래스를 사용할 수 없습니다.
패턴 클래스 및 검색
①public final class java .util.regex.Pattern은 정규식의 컴파일된 표현식입니다. 다음 명령문은 Pattern 객체를 생성하고 이를 핸들 p에 할당합니다. Pattern p=Pattern.compile(regEx);
흥미롭게도 Pattern 클래스는 최종 클래스이고 해당 생성자는 비공개입니다. 누군가가 디자인 패턴에 대해 이야기했거나 관련 정보를 직접 확인할 수 있습니다. 여기서 결론은 Pattern 클래스는 상속될 수 없으며 Pattern 클래스를 만들 수 없다는 것입니다.
따라서 Pattern 클래스에는 다음과 같이 반환 값이 Pattern 개체(참조)인 두 개의 오버로드된 정적 메서드가 제공됩니다. 🎜> 물론 Pattern p=null과 같이 Pattern 클래스의 핸들을 선언할 수 있습니다.
②p.matcher(str)는 템플릿 p를 사용하여 문자열 str에 대한 일치자를 생성하는 것을 의미합니다. 반환 값은 Matcher 클래스 참조입니다. 왜 이것이 필요합니까? 자연스러운 생각에 따르면 간단히 다음 방법을 사용할 수 있습니까?
다음과 같이 코드를 복사하세요.boolean result=Pattern.compile(regEx).matcher(str).find();
문자열 검색, 일치, 지정된 문자열 바꾸기, 문자열 분할 등에 정규식을 사용합니다.
문자열을 생성하는 문자열 - 정규식은 실제로 약간 복잡합니다. 왜냐하면 일반 문자(예: a~z 문자)와 특수 문자(메타 문자라고 함)로 문자열을 설명하고 싶기 때문입니다. 정확한.
몇 가지 정규식 예를 살펴보겠습니다.
프로그램 3: 우리는 항상 이 프로그램을 사용하여 정규식을 테스트합니다
public static Pattern compile(String regex) { return new Pattern(regex, 0); }
①"ab* "——a, ab, abb, abbb와 일치할 수 있습니다.... 따라서 *는 앞의 문자가 0번 이상 나타날 수 있음을 의미합니다. 검색만 고려한다면 "a"를 직접 사용하세요. 그러나 교체 상황을 생각해보십시오. regEx="abb*" 질문의 결과는 무엇입니까?
②"ab+" - ab, abb, abbb와 일치할 수 있습니다... "abb*"와 동일합니다. regEx="or+" 질문의 결과는 무엇입니까?
③"or?" ——o 및 or와 일치할 수 있습니다. ?는 앞의 문자가 0개 또는 1개일 수 있음을 의미합니다.
이러한 한정자 *, +, ?는 앞의 문자(하위 문자열)가 나타나는 횟수를 편리하게 나타냅니다(이를 설명하기 위해 {}를 사용함): x*, 0회 이상 ל{0,}
위 내용이 이 글의 전체 내용입니다. 모두가 정규 표현식의 힘을 깨닫는 데 도움이 되기를 바랍니다.
Java의 문자열 일치(정규 규칙 기반)와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!