侧边栏壁纸
  • 累计撰写 107 篇文章
  • 累计创建 42 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

一个字符定义类-Chars

天明
2026-09-12 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...
public final class Chars {
    /** ASCII 字符表长度,可直接用于“按字符值分桶”的 {@code boolean[]} 标记表 */
    public static final int ASCII_SIZE = 128;

    // ==================== 空白与换行 ====================

    /** 空格 */
    public static final char SPACE = ' ';
    /** 水平制表符 */
    public static final char TAB = '\t';
    /** 换行符 */
    public static final char LINE_FEED = '\n';
    /** 回车符 */
    public static final char CARRIAGE_RETURN = '\r';
    /** 换页符 */
    public static final char FORM_FEED = '\f';
    /** 常见空白字符拼接成的字符串,可直接用于 {@code trim()} / 正则等场景 */
    public static final String WHITESPACE_STRING = " \t\n\r\f";
    /** 常见空白字符 */
    public static final char[] WHITESPACE_CHARS = {SPACE, TAB, LINE_FEED, CARRIAGE_RETURN, FORM_FEED};
    // ==================== 标点与运算符 ====================
    /** 英文逗号 */
    public static final char COMMA = ',';
    /** 英文句点 */
    public static final char DOT = '.';
    /** 冒号 */
    public static final char COLON = ':';
    /** 分号 */
    public static final char SEMICOLON = ';';
    /** 问号 */
    public static final char QUESTION_MARK = '?';
    /** 感叹号 */
    public static final char EXCLAMATION_MARK = '!';
    /** 竖线 */
    public static final char PIPE = '|';
    /** 与号 */
    public static final char AMPERSAND = '&';
    /** 等号 */
    public static final char EQUALS_SIGN = '=';
    /** 加号 */
    public static final char PLUS = '+';
    /** 减号 / 连字符 */
    public static final char MINUS = '-';
    /** 星号 */
    public static final char ASTERISK = '*';
    /** 斜线 */
    public static final char SLASH = '/';
    /** 反斜线 */
    public static final char BACKSLASH = '\\';
    /** 下划线 */
    public static final char UNDERSCORE = '_';
    /** 百分号 */
    public static final char PERCENT = '%';
    /** 井号 */
    public static final char HASH = '#';
    /** at 符号 */
    public static final char AT_SIGN = '@';
    /** 美元符号 */
    public static final char DOLLAR = '$';
    /** 脱字符 */
    public static final char CARET = '^';
    /** 波浪号 */
    public static final char TILDE = '~';
    // ==================== 引号 ====================
    /** 双引号(JSON 字符串) */
    public static final char DOUBLE_QUOTE = '"';
    /** 单引号(SQL、日志常见) */
    public static final char SINGLE_QUOTE = '\'';
    /** 反引号(SQL 标识符、模板串) */
    public static final char BACKTICK = '`';
    /** 常见引号字符 */
    public static final char[] QUOTE_CHARS = {DOUBLE_QUOTE, SINGLE_QUOTE, BACKTICK};
    // ==================== 括号 ====================
    /** 左圆括号 */
    public static final char LEFT_PARENTHESIS = '(';
    /** 右圆括号 */
    public static final char RIGHT_PARENTHESIS = ')';
    /** 左方括号 */
    public static final char LEFT_BRACKET = '[';
    /** 右方括号 */
    public static final char RIGHT_BRACKET = ']';
    /** 左花括号 */
    public static final char LEFT_BRACE = '{';
    /** 右花括号 */
    public static final char RIGHT_BRACE = '}';
    /** 左尖括号 */
    public static final char LEFT_ANGLE = '<';
    /** 右尖括号 */
    public static final char RIGHT_ANGLE = '>';
    /** 左括号:([{ */
    public static final char[] OPENING_BRACKETS = {LEFT_PARENTHESIS, LEFT_BRACKET, LEFT_BRACE};
    /** 右括号:}])(可作为容器闭合判断依据) */
    public static final char[] CLOSING_BRACKETS = {RIGHT_PARENTHESIS, RIGHT_BRACKET, RIGHT_BRACE};
    /** 尖括号 */
    public static final char[] ANGLE_BRACKETS = {LEFT_ANGLE, RIGHT_ANGLE};
    /** 全部括号 */
    public static final char[] BRACKETS = {LEFT_PARENTHESIS, RIGHT_PARENTHESIS, LEFT_BRACKET, RIGHT_BRACKET,
            LEFT_BRACE, RIGHT_BRACE, LEFT_ANGLE, RIGHT_ANGLE};
    // ==================== 标记表(快路径) ====================
    private static final boolean[] WHITESPACE_FLAGS = asciiFlags(WHITESPACE_CHARS);
    private static final boolean[] QUOTE_FLAGS = asciiFlags(QUOTE_CHARS);
    private static final boolean[] OPENING_BRACKET_FLAGS = asciiFlags(OPENING_BRACKETS);
    private static final boolean[] CLOSING_BRACKET_FLAGS = asciiFlags(CLOSING_BRACKETS);
    private static final boolean[] ANGLE_BRACKET_FLAGS = asciiFlags(ANGLE_BRACKETS);
    private static final boolean[] BRACKET_FLAGS = asciiFlags(BRACKETS);
    private Chars() {
    }
    // ==================== 判断方法 ====================
    /**
     * 是否为空白字符:ASCII 空白(空格、{@code \t \n \r \f})或 {@link Character#isWhitespace(char)} 认定的空白
     */
    public static boolean isWhitespace(char c) {
        return (c < ASCII_SIZE && WHITESPACE_FLAGS[c]) || Character.isWhitespace(c);
    }
    /**
     * 是否为换行符({@code \n} 或 {@code \r})
     */
    public static boolean isLineBreak(char c) {
        return c == LINE_FEED || c == CARRIAGE_RETURN;
    }
    /**
     * 是否为引号字符,见 {@link #QUOTE_CHARS}
     */
    public static boolean isQuote(char c) {
        return c < ASCII_SIZE && QUOTE_FLAGS[c];
    }
    /**
     * 是否为左括号:{@code ( [ \{}
     */
    public static boolean isOpeningBracket(char c) {
        return c < ASCII_SIZE && OPENING_BRACKET_FLAGS[c];
    }
    /**
     * 是否为右括号:{@code ) ] \}}
     */
    public static boolean isClosingBracket(char c) {
        return c < ASCII_SIZE && CLOSING_BRACKET_FLAGS[c];
    }
    /**
     * 是否为尖括号:{@code < >}
     */
    public static boolean isAngleBracket(char c) {
        return c < ASCII_SIZE && ANGLE_BRACKET_FLAGS[c];
    }
    /**
     * 是否为任意括号,见 {@link #BRACKETS}
     */
    public static boolean isBracket(char c) {
        return c < ASCII_SIZE && BRACKET_FLAGS[c];
    }
    // ==================== 通用小工具 ====================
    /**
     * 生成 ASCII 标记表:下标即字符值,{@code char >= ASCII_SIZE} 的字符会被忽略
     * (非 ASCII 字符只有少数几种,通常用线性比较更划算)
     */
    public static boolean[] asciiFlags(char... chars) {
        boolean[] flags = new boolean[ASCII_SIZE];
        if (chars != null) {
            for (int i = 0; i < chars.length; i++) {
                if (chars[i] < ASCII_SIZE) {
                    flags[chars[i]] = true;
                }
            }
        }
        return flags;
    }
}

0

评论区