水之路飞 2013-04-28 16:18
浏览 987
已采纳

关于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 2013-04-28 22:42
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序