All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.cellformatter.tokenizer.TokenStore Maven / Gradle / Ivy

There is a newer version: 0.12
Show newest version
package com.github.mygreen.cellformatter.tokenizer;

import java.util.ArrayList;
import java.util.List;

import com.github.mygreen.cellformatter.lang.ArgUtils;
import com.github.mygreen.cellformatter.lang.Utils;


/**
 * {@link Token}を保持するクラス。
 * 

検索機能などを提供する。 * @author T.TSUCHIE * */ public class TokenStore { private List tokens = new ArrayList<>(); public TokenStore() { } /** * トークンを追加する。 * @param token */ public void add(final Token token) { getTokens().add(token); } /** * トークンを取得する。 * @return */ public List getTokens() { return tokens; } /** * 記号でトークンを分割する。 * @param symbol 分割する記号 * @return * @throws IllegalArgumentException symbol == null. */ public List split(final Token.Symbol symbol) { ArgUtils.notNull(symbol, "symbol"); final List list = new ArrayList<>(); TokenStore store = new TokenStore(); list.add(store); for(Token token : tokens) { if(token.equals(Token.SYMBOL_SEMI_COLON)) { store = new TokenStore(); list.add(store); } else { store.add(token); } } return list; } /** * トークンを全て結合した値を取得する。 * @return */ public String getConcatenatedToken() { StringBuilder sb = new StringBuilder(); for(Token token : tokens) { sb.append(token.getValue()); } return sb.toString(); } /** * {@link Token.Factor}中に指定した文字列を含むかどうか。 * @param search * @return */ public boolean containsInFactor(final String search) { return containsInFactor(search, false); } /** * 大文字・小文字を無視して{@link Token.Factor}中に指定した文字列を含むかどうか。 * @param search * @return */ public boolean containsInFactorIgnoreCase(final String search) { return containsInFactor(search, true); } public boolean containsInFactor(final String search, final boolean ignoreCase) { for(Token token : tokens) { if(!(token instanceof Token.Factor)) { continue; } final Token.Factor factor = token.asFactor(); if(ignoreCase) { if(Utils.containsIgnoreCase(factor.getValue(), search)) { return true; } } else { if(factor.getValue().contains(search)) { return true; } } } return false; } /** * {@link Token.Factor}中に指定した文字列の何れかを含むかどうか。 * @param searchChars * @return */ public boolean containsAnyInFactor(final String[] searchChars) { return containsAnyInFactor(searchChars, false); } /** * 大文字・小文字を無視して{@link Token.Factor}中に指定した文字列の何れかを含むかどうか。 * @param searchChars * @return */ public boolean containsAnyInFactorIgnoreCase(final String[] searchChars) { return containsAnyInFactor(searchChars, true); } /** * 大文字・小文字を無視して{@link Token.Factor}中に指定した文字列の何れかを含むかどうか。 * @param searchChars * @return */ private boolean containsAnyInFactor(final String[] searchChars, final boolean ignoreCase) { for(Token token : tokens) { if(!(token instanceof Token.Factor)) { continue; } final Token.Factor factor = token.asFactor(); if(Utils.containsAny(factor.getValue(), searchChars, ignoreCase)) { return true; } } return false; } @Override public String toString() { StringBuilder sb = new StringBuilder(); final int size = tokens.size(); for(int i=0; i < size; i++) { final Token token = tokens.get(i); sb.append(String.format("[%d]%s(%s)", i, token.getClass().getSimpleName(), token.getValue())); if(i < size-1) { sb.append(", "); } } return sb.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy