나는 모든 사람이 종종 분할 문자열을 사용한다고 생각하지만 다음과 같은 상황을 만났다고 생각합니다.
누구나 다음 코드 실행 결과에 대해 생각합니다.
public static void main (String [] args) {// todo auto-generatd method str1 = "a, b, c, a"; , B, C ,, ""; String [] s1 = str1.split ( ",", "); String [] s2 = str2.split (", "); String [] s3 = str3.split (" "" "", "); str3 길이 : "+"+ s3.length);}
실행 결과 :
이 결과가 어떻게 나타나는가?
해결책:
API를 보면 일반적으로 사용되는 분할 방법이 기본적으로 0만큼 전송됩니다.
public static void main (String [] args) {// todo auto-generatd method str1 = "a, b, c, a"; , b, c ,, ""; Split ( ",", -1). "str3 길이 :"+s3.length);}
API를 찾은 후 문자열 클래스에는 두 개의 분할 무거운 부하 방법이 있음을 알았습니다.
1. public String [] split (String regex)
이 문자열은 주어진 정규식에 따라 분할됩니다.
이 방법의 역할은 주어진 표현식을 사용하고 한계 매개 변수 0을 사용하여 두 파라미터 분할 방법을 호출하는 것과 같습니다. 따라서 배열에는 END -EMPTY String이 포함되어 있지 않습니다.
예를 들어, 문자열 "boo : 및 : foo"는 다음 결과를 생성 할 수 있습니다.
REGEX 결과
: { "boo", "및", "foo"} o { "b", ",": 및 : f "}
매개 변수 :
Regex -fixed Law 정규 표현 반환 :
이 문자열을 분할하기 위해 정규 표현식 표현식의 일치에 따라 튀어 나온 문자열 배열 :
PatternSynTaxException- 정규 표현의 문법이 유효하지 않은 경우
2. public String [] split (String regex, int limit)
이 문자열은 일치에 의해 주어진 정규 표현에 따라 분할됩니다.
이 방법에 의해 반환 된 배열에는이 문자열의 하위 스트링이 포함되면 주어진 표현식의 다른 서브 스트링이 종료 되거나이 문자열의 끝이 종료됩니다. 배열의 하위 스트링은이 문자열에 나타나는 순서대로 배열됩니다. 표현식이 입력의 일부와 일치하지 않으면 소득 배열에는 하나의 요소, 즉이 문자열이 있습니다.
매개 변수 제어 모드 애플리케이션을 제한하므로 배열의 길이에 영향을 미칩니다. 이 한계 N이 0보다 크면 모드가 가장 N- 정점으로 사용되며 배열의 길이는 N보다 크지 않으며 배열의 마지막 항목에는 최종 일치 경계를 넘어서 모든 입력이 포함됩니다. n이 비 양성이면 모드는 가능한 한 많이 사용되며 배열의 길이 일 수 있습니다. n이 0이면 모드가 가능한 한 많이 사용되면 배열은 길이가 될 수 있고 끝 -비어 문자열은 폐기됩니다.
예를 들어, 문자열 "boo : and : foo"는 이러한 매개 변수로 다음 결과를 생성 할 수 있습니다.
RegexLimit 결과
: 2 { "boo", "and : foo"} : 5 { "boo", ",", "foo"} : -2 { "boo", ","foo "} o 5 {"b " "", ": and : f", "", ","} o -2 { "b", "", ":": f ",", ","} o 0 { "b", "": 및 : 에프"}
이 방법을 부르는 str.split (Regex, N)의 형태는 다음 표현식에 의해 생성 된 결과와 정확히 동일합니다.
pattern.compile (regex) .split (str, n)
매개 변수 :
Regex- 정의 정규 표현
위에서 설명한 바와 같이 제한 -result 임계 값
반품:
문자열 배열은 정규 표현식의 일치에 따라 결정됩니다.
던지기 :
PatternSynTaxException- 정규 표현의 문법이 유효하지 않은 경우