StringMatcherFactory.java
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.commons.text.matcher;
- import org.apache.commons.lang3.ArrayUtils;
- import org.apache.commons.lang3.StringUtils;
- /**
- * Provides access to matchers defined in this package.
- *
- * @since 1.3
- */
- public final class StringMatcherFactory {
- /**
- * Matches the comma character.
- */
- private static final AbstractStringMatcher.CharMatcher COMMA_MATCHER = new AbstractStringMatcher.CharMatcher(',');
- /**
- * Matches the double quote character.
- */
- private static final AbstractStringMatcher.CharMatcher DOUBLE_QUOTE_MATCHER = new AbstractStringMatcher.CharMatcher(
- '"');
- /**
- * Defines the singleton for this class.
- */
- public static final StringMatcherFactory INSTANCE = new StringMatcherFactory();
- /**
- * Matches no characters.
- */
- private static final AbstractStringMatcher.NoneMatcher NONE_MATCHER = new AbstractStringMatcher.NoneMatcher();
- /**
- * Matches the single or double quote character.
- */
- private static final AbstractStringMatcher.CharSetMatcher QUOTE_MATCHER = new AbstractStringMatcher.CharSetMatcher(
- "'\"".toCharArray());
- /**
- * Matches the double quote character.
- */
- private static final AbstractStringMatcher.CharMatcher SINGLE_QUOTE_MATCHER = new AbstractStringMatcher.CharMatcher(
- '\'');
- /**
- * Matches the space character.
- */
- private static final AbstractStringMatcher.CharMatcher SPACE_MATCHER = new AbstractStringMatcher.CharMatcher(' ');
- /**
- * Matches the same characters as StringTokenizer, namely space, tab, newline, form feed.
- */
- private static final AbstractStringMatcher.CharSetMatcher SPLIT_MATCHER = new AbstractStringMatcher.CharSetMatcher(
- " \t\n\r\f".toCharArray());
- /**
- * Matches the tab character.
- */
- private static final AbstractStringMatcher.CharMatcher TAB_MATCHER = new AbstractStringMatcher.CharMatcher('\t');
- /**
- * Matches the String trim() whitespace characters.
- */
- private static final AbstractStringMatcher.TrimMatcher TRIM_MATCHER = new AbstractStringMatcher.TrimMatcher();
- /**
- * No need to build instances for now.
- */
- private StringMatcherFactory() {
- // empty
- }
- /**
- * Creates a matcher that matches all of the given matchers in order.
- *
- * @param stringMatchers the matcher
- * @return a matcher that matches all of the given matchers in order.
- * @since 1.9
- */
- public StringMatcher andMatcher(final StringMatcher... stringMatchers) {
- final int len = ArrayUtils.getLength(stringMatchers);
- if (len == 0) {
- return NONE_MATCHER;
- }
- if (len == 1) {
- return stringMatchers[0];
- }
- return new AbstractStringMatcher.AndStringMatcher(stringMatchers);
- }
- /**
- * Constructor that creates a matcher from a character.
- *
- * @param ch the character to match, must not be null
- * @return a new Matcher for the given char
- */
- public StringMatcher charMatcher(final char ch) {
- return new AbstractStringMatcher.CharMatcher(ch);
- }
- /**
- * Constructor that creates a matcher from a set of characters.
- *
- * @param chars the characters to match, null or empty matches nothing
- * @return a new matcher for the given char[]
- */
- public StringMatcher charSetMatcher(final char... chars) {
- final int len = ArrayUtils.getLength(chars);
- if (len == 0) {
- return NONE_MATCHER;
- }
- if (len == 1) {
- return new AbstractStringMatcher.CharMatcher(chars[0]);
- }
- return new AbstractStringMatcher.CharSetMatcher(chars);
- }
- /**
- * Creates a matcher from a string representing a set of characters.
- *
- * @param chars the characters to match, null or empty matches nothing
- * @return a new Matcher for the given characters
- */
- public StringMatcher charSetMatcher(final String chars) {
- final int len = StringUtils.length(chars);
- if (len == 0) {
- return NONE_MATCHER;
- }
- if (len == 1) {
- return new AbstractStringMatcher.CharMatcher(chars.charAt(0));
- }
- return new AbstractStringMatcher.CharSetMatcher(chars.toCharArray());
- }
- /**
- * Returns a matcher which matches the comma character.
- *
- * @return a matcher for a comma
- */
- public StringMatcher commaMatcher() {
- return COMMA_MATCHER;
- }
- /**
- * Returns a matcher which matches the double quote character.
- *
- * @return a matcher for a double quote
- */
- public StringMatcher doubleQuoteMatcher() {
- return DOUBLE_QUOTE_MATCHER;
- }
- /**
- * Matches no characters.
- *
- * @return a matcher that matches nothing
- */
- public StringMatcher noneMatcher() {
- return NONE_MATCHER;
- }
- /**
- * Returns a matcher which matches the single or double quote character.
- *
- * @return a matcher for a single or double quote
- */
- public StringMatcher quoteMatcher() {
- return QUOTE_MATCHER;
- }
- /**
- * Returns a matcher which matches the single quote character.
- *
- * @return a matcher for a single quote
- */
- public StringMatcher singleQuoteMatcher() {
- return SINGLE_QUOTE_MATCHER;
- }
- /**
- * Returns a matcher which matches the space character.
- *
- * @return a matcher for a space
- */
- public StringMatcher spaceMatcher() {
- return SPACE_MATCHER;
- }
- /**
- * Matches the same characters as StringTokenizer, namely space, tab, newline and form feed.
- *
- * @return The split matcher
- */
- public StringMatcher splitMatcher() {
- return SPLIT_MATCHER;
- }
- /**
- * Creates a matcher from a string.
- *
- * @param chars the string to match, null or empty matches nothing
- * @return a new Matcher for the given String
- * @since 1.9
- */
- public StringMatcher stringMatcher(final char... chars) {
- final int length = ArrayUtils.getLength(chars);
- return length == 0 ? NONE_MATCHER
- : length == 1 ? new AbstractStringMatcher.CharMatcher(chars[0])
- : new AbstractStringMatcher.CharArrayMatcher(chars);
- }
- /**
- * Creates a matcher from a string.
- *
- * @param str the string to match, null or empty matches nothing
- * @return a new Matcher for the given String
- */
- public StringMatcher stringMatcher(final String str) {
- return StringUtils.isEmpty(str) ? NONE_MATCHER : stringMatcher(str.toCharArray());
- }
- /**
- * Returns a matcher which matches the tab character.
- *
- * @return a matcher for a tab
- */
- public StringMatcher tabMatcher() {
- return TAB_MATCHER;
- }
- /**
- * Matches the String trim() whitespace characters.
- *
- * @return The trim matcher
- */
- public StringMatcher trimMatcher() {
- return TRIM_MATCHER;
- }
- }