gpt4 book ai didi

java - EnumMap-用于检测转义字符

转载 作者:行者123 更新时间:2023-12-02 06:42:50 25 4
gpt4 key购买 nike

出于个人兴趣,我正在对各种转义特殊字符的方法进行基准测试。

一位同事建议 EnumMap 也可能很快,以便检查映射中是否包含字符。

我正在尝试以下代码,它可以使用 containsValue();

但是,可以使其与 containsKey(); 一起使用吗?

public static enum EscapeChars {
COLON(':'), SLASH('\\'), QUESTION('?'), PLUS('+'), MINUS('-'), EXCLAMATION(
'!'), LEFT_PARENTHESIS('('), RIGHT_PARENTHESIS(')'), LEFT_CURLY(
'{'), RIGHT_CURLY('}'), LEFT_SQUARE('['), RIGHT_SQUARE(']'), UP(
'^'), QUOTE('"'), TILD('~'), ASTERISK('*'), PIPE('|'), AMPERSEND('&');

private final char character;

EscapeChars(char character) {
this.character = character;
}

public char getCharacter() {
return character;
}
}

static EnumMap<EscapeChars, Integer> EnumMap = new EnumMap<EscapeChars,Integer>(
EscapeChars.class);

static {
for (EscapeChars ec : EscapeChars.values()) {
EnumMap.put(ec, (int)ec.character);
}
}

static void method5_Enum() {

String query2="";

for (int j = 0; j < TEST_TIMES; j++) {
query2 = query;
char[] queryCharArray = new char[query.length() * 2];
char c;
int length = query.length();
int currentIndex = 0;
for (int i = 0; i < length; i++) {
c = query.charAt(i);
if (EnumMap.containsValue((int)c)) {
if ('&' == c || '|' == c) {
if (i + 1 < length && query.charAt(i + 1) == c) {
queryCharArray[currentIndex++] = '\\';
queryCharArray[currentIndex++] = c;
queryCharArray[currentIndex++] = c;
i++;
}
} else {
queryCharArray[currentIndex++] = '\\';
queryCharArray[currentIndex++] = c;
}
} else {
queryCharArray[currentIndex++] = c;
}
}

query2 = new String(queryCharArray, 0, currentIndex);
}


System.out.println(query2);

}

引用:https://softwareengineering.stackexchange.com/questions/212254/optimized-special-character-escaper-vs-matcher-pattern

最佳答案

我不相信您会想要这样做,因为您首先必须转换为 EscapeChars这就是 Map 的意义所在用于查找。我建议考虑到您的用法,我会使用 Map<Integer, EscapeChars>并使用containsKey在这张 map 上。

关于java - EnumMap-用于检测转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18960856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com