Java JSTL Split函数正则表达式

时间:2016-02-08 21:41:52

标签: java regex split jstl

我有JSTL Java代码,它读取请求标头Accept language paremeter

<c:set var="locale" value="<%= request.getHeader("Accept-Language") %>"/>

变量区域设置的值因浏览器语言设置的顺序而异。

有时就像这样

en-GB,en;q=0.8,en-AU;q=0.6,en-US;q=0.4,en-CA;q=0.2

其他时候就像这样

en,en-GB;q=0.8,en-AU;q=0.6,en-US;q=0.4,en-CA;q=0.2

在任何一种情况下,我都想读取第一次出现的语言环境,例如en-XX。在这种情况下,en-GB。

我使用的是分离功能,但我无法找出将其用于此任务的正确方法。

我这样做了,只有当en-XX是字符串中的第一个

时才能工作
<c:set var="locale" value="<%= request.getHeader("Accept-Language").split(",")[0] %>"/>

非常感谢任何有关将正则表达式与分割函数(或任何其他函数)结合使用的帮助。

谢谢,

2 个答案:

答案 0 :(得分:1)

两个答案:

  1. 不要这样做(在JSTL中),但在你的servlet代码中,如果你真的需要
  2. 不要这样做,而是使用request.getLocale()
  3. {{1}}:

      

    根据Accept-Language标头返回客户端将接受内容的首选语言环境。

    做你想做的事情可能是更好的选择。

答案 1 :(得分:0)

specification中没有任何内容表明语言按优先级(质量)的降序排列。

您应该做的是将您支持的语言与给定的语言列表进行比较,以找到最佳匹配。

E.g。如果你得到这个(例子来自规范):

Accept-Language: da, en-gb;q=0.8, en;q=0.7

但你只支持“英语(美国)”和“西班牙语(墨西哥)”,那么最好的(唯一的)匹配是en;q=0.7,意思是“任何英语”,所以你的选择是{{ 1}}。

这一切都应该在Servlet或动作处理程序中完成,而不是在JSP中完成。或者,您可以创建一个帮助程序类来提供JSP可以与en-US一起使用的逻辑。