首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用包含单引号的字符串键查找EL地图

使用包含单引号的字符串键查找EL地图
EN

Stack Overflow用户
提问于 2016-03-01 14:21:42
回答 1查看 1.4K关注 0票数 3

我有一个Java页面( HashMap<String,String> ),它是通过Spring (itemTypesByKey)提供的,还有一个单独的结构,其中包含一个键列表。(这些键可能导致或不可能导致有效的查找。)我对这些键进行枚举,并从映射中捕获值。

代码语言:javascript
运行
复制
Map<String, String> itemTypes = new HashMap<>();
itemTypes.put("NormalValue", "INGREDIENT");
itemTypes.put("Apostro'Value", "INGREDIENT");
ModelAndView mav = ...
mav.addObject("itemTypesByKey", itemTypes);

我看到的问题是,如果我的键包含一个撇号,查找就会失败。

我的代码(用于调试):

代码语言:javascript
运行
复制
Key Name: ${currentKeyName}
Not Empty: ${not empty itemTypesByKey[currentKeyName]}
Type: ${itemTypesByKey[currentKeyName]}
All Suite Types: ${itemTypesByKey}

最后打印两个单独的键:

代码语言:javascript
运行
复制
Key Name: NormalValue
Not Empty: true
Type: INGREDIENT
All Suite Types: {NormalValue=INGREDIENT, Apostro'Value=INGREDIENT}

Key Name: Apostro'Value
Not Empty: false
Type:
All Suite Types: {NormalValue=INGREDIENT, Apostro'Value=INGREDIENT}

当撇号用于查找值时,我理解转义撇号文字,但是如果我的键包含撇号,为什么会失败呢?无论键的值是否包含特殊字符,如何安全地在映射中执行查找?

编辑:我使用的是SpringVersion3.1.4 (mvc、等),这个问题不影响包含感叹号的键或其他我可以考虑测试的特殊字符。

EN

Stack Overflow用户

回答已采纳

发布于 2016-03-15 21:32:47

下面是一些测试和结果。为了在键内使用撇号,必须使用两个单引号。最重要的是,键中有单引号或特殊字符(感叹号、双引号等)需要有单引号围绕着它。底线是用单引号包围您的键&如果您的键中有一个单引号,请使用两个单引号。

代码语言:javascript
运行
复制
public static void main(String[] args) {
    ExpressionParser parser = new SpelExpressionParser();
    Map<String,String> itemTypes = (Map) parser.parseExpression("{NormalValue:'INGREDIENT',ApostroValue:'INGREDIENT'}").getValue();
    for (Map.Entry<String, String> e : itemTypes.entrySet())
        System.out.println(e.getKey() + ": " + e.getValue());
}

打印键和值

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT',Apostro'Value:'INGREDIENT'}")

线程"main“org.springframework.expression.spel.SpelParseException: EL1046E:(pos 51):无法找到终止字符串中的异常

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT',Apostro''Value:'INGREDIENT'}")

线程"main“org.springframework.expression.spel.SpelParseException: EL1043E:(pos 33)中的异常:意外令牌。预期的‘冒号(:)’但是是'literal_string‘

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT','Apostro''Value':'INGREDIENT'}")

版画精细

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT',Apostro\"Value:'INGREDIENT'}")

线程"main“org.springframework.expression.spel.SpelParseException: EL1045E:(pos 33):找不到终止字符串中的异常

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT','Apostro\"Value':'INGREDIENT'}")

版画精细

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT',Apostro!Value:'INGREDIENT'}")

线程"main“org.springframework.expression.spel.SpelParseException: EL1043E:(pos 33)中的异常:意外令牌。预期‘冒号(:)’但不是‘(!)’

代码语言:javascript
运行
复制
parseExpression("{NormalValue:'INGREDIENT','Apostro!Value':'INGREDIENT'}")

版画精细

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35725400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档