使用replaceFirst时的注意事项

公司项目最近有一个开发填空题的需求,经过思索和分析,决定通过SpannableString来实现,在这个过程中,replaceFirst给了我两个坑:


坑一:

通过UnderlineSpan在填空位置画下划线,并通过ClickableSpan 给填空处设置监听,点击下滑线处便呼出带有输入框的对话框输入内容之后替换到空格处

由于UnderlineSpan对空格加下划线在部分手机上实现不了,于是在填空位置首尾加上一对括号

在将输入值赋到空处出现问题

例如,content  =  我是##人,我爱##;firstValue = 中国 ;经历以下代码之后:

content = content.replaceFirst(YHAnswer.SEPARATOR, “(”+fisrtValue+")");

content 变成了  我是(中国人,我爱##);预期值是  我是(中国)人,我爱##

这不知道算不算一个bug,我研究了好久,以为是括号造成的,换成别的符号甚至汉字还是如此,但不加括号却是正常的,

最后发现原因是后面这个参数是拼接的,改成下面这样就没问题了

String before = "("+fisrtValue+")";
content = content.replaceFirst(YHAnswer.SEPARATOR, before);


坑二:

在输入过程中,难免会输入特殊符号,当输入$号时,经过replaceFirst后$  号就不见了

例如,content  =  我是##人,我爱##;firstValue = 中$$国 ;经历以下代码之后:

String before = "("+fisrtValue+")";
content = content.replaceFirst(YHAnswer.SEPARATOR, before);

content 变成了  我是(中国)人,我爱##);预期值是  我是(中$$国)人,我爱##

如果需求允许,可以直接屏蔽$,如果不允许则需要添加转义字符;



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值