Guava 6 - 문자열 처리:분할, 연결, 채우기

6295 단어

커넥터[Joiner]


문자열의 서열을 구분자로 연결하는 것도 불필요한 번거로움을 만날 수 있다.문자열 서열에null이 포함되어 있으면 연결 작업이 더욱 어려울 것입니다.Fluent 스타일의 Joiner를 사용하면 연결 문자열을 쉽게 만들 수 있습니다.
Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");

위 코드가 Harry로 반환됩니다.Ron; Hermione”.또한useForNull (String) 방법은 null을 대체하는 문자열을 지정할 수 있으며, skipNull () 방법과는 달리null을 무시할 수 있습니다.Joiner는 대상 유형을 연결하는 데도 사용할 수 있습니다. 이 경우 대상의 tostring () 값을 연결합니다.
Joiner.on(",").join(Arrays.asList(1, 5, 7)); // returns "1,5,7"

경고:joiner 실례는 항상 변할 수 없습니다.joiner 목표의 의미를 정의하는 설정 방법은 항상 새로운joiner 실례를 되돌려줍니다.이로써 Joiner 실례는 모두 라인이 안전합니다. static final 상수로 정의할 수 있습니다.

분할기 [splitter]


JDK 내에 만들어진 문자열 분할 도구에는 일부 이상한 특성이 있습니다.예를 들어, String.split은 끝부분의 구분자를 몰래 버렸습니다.질문: ",a,,b,"split (",") 반환?
  • “”, “a”, “”, “b”, “”
  • null, “a”, null, “b”, null
  • “a”, null, “b”
  • “a”, “b”
  • 이상은 모두 틀렸다
  • 정답은 5:","a","b"입니다.끝부분의 빈 문자열만 무시되었습니다.Splitter는 사람을 안심시키고 직설적인 유창한 API 모드를 사용하여 이러한 혼란스러운 특성을 완전히 제어했다.
    Splitter.on(',')
            .trimResults()
            .omitEmptyStrings()
            .split("foo,bar,,   qux");
    

    위 코드는 "foo", "bar", "qux"를 포함하는 Iterable로 반환됩니다.Splitter는 모든 모드, 문자, 문자열 또는 문자 일치기에 따라 분할되도록 설정할 수 있습니다.

    분할기 공장


    메서드
    묘사
    예제
    Splitter.on(char)
    단일 문자로 분할
    Splitter.on(‘;’)
    Splitter.on(CharMatcher)
    문자 일치 프로그램별로 분할
    Splitter.on(CharMatcher.BREAKING_WHITESPACE)
    Splitter.on(String)
    문자열로 나누기
    Splitter.on(“,   “)
    Splitter.on(Pattern)Splitter.onPattern(String)
    정규 표현식에 따라 나누다
    Splitter.onPattern(“\r?”)
    Splitter.fixedLength(int)
    고정 길이로 나누기;마지막 세그먼트는 지정된 길이보다 짧을 수 있지만 비어 있지 않습니다.
    Splitter.fixedLength(3)

    분할기 수정자


    메서드
    묘사
    omitEmptyStrings()
    결과에서 빈 문자열 자동 무시
    trimResults()
    결과 문자열의 선행 및 후행 공백 제거
    trimResults(CharMatcher)
    주어진 일치기, 결과 문자열의 전도 일치 문자와 꼬리 일치 문자를 제거합니다
    limit(int)
    분할된 문자열 수 제한
    분할기가 List로 돌아가려면 Lists를 사용하십시오.newArrayList(splitter.split(string)) 또는 유사한 메서드입니다.경고: splitter 실례는 항상 변할 수 없습니다.splitter 목표의 의미를 정의하는 설정 방법은 항상 새로운 splitter 실례를 되돌려줍니다.이것은 splitter의 실례를 모두 안전하게 합니다. static final 상수로 정의할 수 있습니다.

    문자 일치기 [CharMatcher]


    이전 Guava 버전에서 StringUtil류는 미친 듯이 팽창했다. 문자열을 처리하는 방법은 all Ascii,collapse,collapseControlChars,collapseWhitespace,index OfChars,last Index NotOf,num Shared Chars,remove Chars,remove Crlf,replace Chars,retain All Chars,strip,strip And Collapse,strip Non Digits가 많았다.이러한 모든 접근 방식은
  • 어떻게 일치 문자를 계산합니까?
  • 일치하는 문자는 어떻게 처리합니까?

  • 이 수렁을 수습하기 위해 CharMatcher를 개발했습니다.
    직관적으로, 당신은 CharMatcher 실례가 숫자나 공백 문자와 같은 어떤 종류의 문자를 대표한다고 생각할 수 있다.사실 CharMatcher의 실례는 문자에 대한 브리의 판단이다. CharMatcher는Predicate를 실현했지만 모든 공백 문자나 모든 소문자와 유사하다는 수요가 너무 보편적이어서 Guava가 이 API를 만들었다.
    그러나CharMatcher를 사용하는 장점은 문자에 대해 특정한 동작을 할 수 있는 일련의 방법을 제공하는 데 있다. 즉, 편집 [trim], 접기 [collapse], 제거 [remove], 보존 [retain] 등이다.CharMatcher 인스턴스는 먼저 개념 1을 나타냅니다. 일치하는 문자는 어떻게 계산합니까?그리고 많은 조작 개념을 제공했다. 2: 이 일치하는 문자를 어떻게 처리합니까?이러한 설계로 인해 API 복잡성의 선형 증가는 유연성과 기능 양방면의 증가를 가져올 수 있다.
    String noControl = CharMatcher.JAVA_ISO_CONTROL.removeFrom(string); //  control  
    String theDigits = CharMatcher.DIGIT.retainFrom(string); //       
    String spaced = CharMatcher.WHITESPACE.trimAndCollapseFrom(string, ' ');
    //       ,                
    String noDigits = CharMatcher.JAVA_DIGIT.replaceFrom(string, "*"); // *       
    String lowerAndDigit = CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom(string);
    //           
    

    참고: CharMatcher는 char 유형이 나타내는 문자만 처리합니다.0x10000에서 0x10FFFF까지의 유니코드 추가 문자를 이해할 수 없습니다.이 논리 문자들은 [surrogate pairs] 형식으로 문자열을 인코딩하고,CharMatcher는 이 논리 문자를 두 개의 독립된 문자로만 볼 수 있다.

    문자 일치기 가져오기


    CharMatcher의 상수는 대부분의 문자 일치 요구 사항을 충족합니다.
    ANY
    NONE
    WHITESPACE
    BREAKING_WHITESPACE
    INVISIBLE
    DIGIT
    JAVA_LETTER
    JAVA_DIGIT
    JAVA_LETTER_OR_DIGIT
    JAVA_ISO_CONTROL
    JAVA_LOWER_CASE
    JAVA_UPPER_CASE
    ASCII
    SINGLE_WIDTH
     
     
    기타 문자 일치기를 가져오는 일반적인 방법은 다음과 같습니다.
    메서드
    묘사
    anyOf(CharSequence)
    매거 일치 문자.CharMatcher와 같습니다.anyOf 소문자 영어 모음 일치
    is(char)
    주문서에 문자를 일치시키다.
    inRange(char, char)
    CharMatcher와 같은 주어진 문자 범위가 일치합니다.inRange(‘a’, ‘z’)
    이 밖에CharMatcher는negate(), and(CharMatcher)와or(CharMatcher) 방법도 있다.

    문자 일치기 사용


    CharMatcher는 CharSequence의 특정 문자를 조작하는 다양한 방법을 제공합니다.그 중에서 가장 자주 사용하는 나열은 다음과 같다.
    메서드
    묘사
    collapseFrom(CharSequence,   char)
    각 그룹의 연속적인 일치 문자를 특정 문자로 바꿉니다.예를 들어 WHITESPACE.collapseFrom (string, '') 은 문자열의 연속 공백 문자를 하나의 공백으로 대체합니다.
    matchesAllOf(CharSequence)
    문자열의 모든 문자가 일치하는지 테스트합니다.
    removeFrom(CharSequence)
    문자 시퀀스에서 일치하는 문자를 모두 제거합니다.
    retainFrom(CharSequence)
    문자 시퀀스에서 일치하는 문자를 유지하고 다른 문자를 제거합니다.
    trimFrom(CharSequence)
    문자열의 선행 일치 문자와 후행 일치 문자를 제거합니다.
    replaceFrom(CharSequence,   CharSequence)
    일치하는 문자를 특정 문자열로 대체합니다.
    이 모든 방법은 String으로 되돌아옵니다. matches AllOf를 제외하고는boolean으로 되돌아옵니다.

    문자 세트 [Charsets]


    이렇게 문자 세트 처리를 하지 마십시오.
    try {
        bytes = string.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        // how can this possibly happen?
        throw new AssertionError(e);
    }
    

    이렇게 써 보세요.
    bytes = string.getBytes(Charsets.UTF_8);
    

    Charsets는 모든 Java 플랫폼에서 지원되는 6가지 문자 세트에 대해 상수 참조를 제공합니다.이름 대신 이러한 상수를 사용하여 문자 세트 인스턴스를 가져옵니다.

    대소문자 형식 [CaseFormat]


    CaseFormat는 다양한 ASCII 대소문자 규범 사이에서 문자열을 쉽게 변환하는 데 사용됩니다. 예를 들어 프로그래밍 언어의 명칭 규범입니다.CaseFormat에서 지원하는 형식은 다음과 같습니다.
    서식
    예제
    LOWER_CAMEL
    lowerCamel
    LOWER_HYPHEN
    lower-hyphen
    LOWER_UNDERSCORE
    lower_underscore
    UPPER_CAMEL
    UpperCamel
    UPPER_UNDERSCORE
    UPPER_UNDERSCORE
    CaseFormat의 사용법은 매우 직접적입니다.
    CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME")); // returns "constantName"
    

    우리 CaseFormat는 코드 생성기를 작성할 때와 같은 경우에 특히 유용합니다.

    좋은 웹페이지 즐겨찾기