a21841625
水之路飞
2013-04-28 16:18

关于java转义字符提交保存到数据库的问题。

已采纳

最近做了一个简单的自动计算工资的功能。
其中用到国内的开源的框架:IKExpression处理其中的计算工资的公式解析问题。
在IKExpression中规定:
公式中的字符串之间的比较解析,需要给字符串添加转义符。
如下公式:
[code="java"]
String exp = "(角色 == \"小麦计量\")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == \"中转计量\")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == \"内勤\")?(绩效分数*0.01*岗位基数):(0)))";
[/code]
如下参数:
[code="java"]
variables.add(Variable.createVariable("角色", "中转计量"));
variables.add(Variable.createVariable("计量工资", new Double(100.0)));
variables.add(Variable.createVariable("基本工资", new Double(100.0)));
variables.add(Variable.createVariable("绩效分数", new Double(90.0)));
variables.add(Variable.createVariable("岗位基数", new Double(5000)));
[/code]
在TestCase中测试OK,没有问题。
执行前打印公式:
[code="java"]
expression : (角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0)))
[/code]
转义符自动转换了。既然解决了问题,咱就开始前台设计了。
把上面的公式,带转义符的设置到前台。然后保存进数据库。在根据业务从数据库中读取出来。
这时候问题来了。转义字符一直存在。公式无法解析。提示有非法的字符:\
测试很多次无果。强烈以为数据在保存进oracle的时候,编码被数据库给改变,导致java自身识别不了,无法自动解析这\"转义符号。
最后过次测试。把前台的公式编辑器里保存提交时候的公式写成如下:
code="java"?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0)))
[/code]
然后,什么问题都没有了。

接着,我的疑问来了。
前台提交字符串: 角色=="测试"
我们都知道String test = ""; 这是java中的字符定义方式。
那再action中传递来的字符: 角色=="测试"
在获取的时候 难道不是 : "角色=="测试"" 这样的?
如果是这样的话,那字符不就被截断成:"角色==","测试" 这样2个字符?
这里的本来应该有的\" 哪里去了,自动处理还是?
反正不用转义符这样的变量:角色=="测试"
应该是无法申明或者赋值的吧。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • yunzhu666 yunzhu666 8年前

    JVM中的一个字符串,不管有多少双引号都没有关系,它自己会认识的,比如你从文件中读取一个字符串:角色=="测试",那么JVM中的字符串就还是原样的字符串,不存在截断的问题。要转义,主要是显式写在代码中时,需要加\进行转义,还有进行字符串拼接时。

    点赞 评论 复制链接分享
  • jinnianshilongnian jinnianshilongnian 8年前

    你可以测试下从前台传入 \" 如果后台得到的长度是2那么就是两个字符 而表达字面量时是一个字符

    点赞 评论 复制链接分享

相关推荐