關(guān)于replaceFirst使用時(shí)的注意事項(xiàng)
replaceFirst使用時(shí)的注意事項(xiàng)
公司項(xiàng)目最近有一個(gè)開發(fā)填空題的需求,經(jīng)過思索和分析,決定通過SpannableString來實(shí)現(xiàn),在這個(gè)過程中
replaceFirst給了我兩個(gè)坑:
坑一
通過UnderlineSpan在填空位置畫下劃線,并通過ClickableSpan 給填空處設(shè)置監(jiān)聽,點(diǎn)擊下滑線處便呼出帶有輸入框的對話框輸入內(nèi)容之后替換到空格處
由于UnderlineSpan對空格加下劃線在部分手機(jī)上實(shí)現(xiàn)不了,于是在填空位置首尾加上一對括號
在將輸入值賦到空處出現(xiàn)問題
例如:
content = 我是##人,我愛##;firstValue = 中國 ;經(jīng)歷以下代碼之后:
content = content.replaceFirst(YHAnswer.SEPARATOR, “(”+fisrtValue+")");
content 變成了 我是(中國人,我愛##);預(yù)期值是 我是(中國)人,我愛##
這不知道算不算一個(gè)bug,我研究了好久,以為是括號造成的,換成別的符號甚至漢字還是如此,但不加括號卻是正常的,
最后發(fā)現(xiàn)原因是后面這個(gè)參數(shù)是拼接的,改成下面這樣就沒問題了
String before = "("+fisrtValue+")";
content = content.replaceFirst(YHAnswer.SEPARATOR, before);坑二
在輸入過程中,難免會輸入特殊符號,當(dāng)輸入$號時(shí),經(jīng)過replaceFirst后$ 號就不見了
例如:
content = 我是##人,我愛##;firstValue = 中$$國 ;經(jīng)歷以下代碼之后:
String before = "("+fisrtValue+")";
content = content.replaceFirst(YHAnswer.SEPARATOR, before);content 變成了 我是(中國)人,我愛##);預(yù)期值是 我是(中$$國)人,我愛##
如果需求允許,可以直接屏蔽$,如果不允許則需要添加轉(zhuǎn)義字符;
String類的replaceFirst方法不好用的原因
今天正好用String的replace方法來替換下面的AND,結(jié)果發(fā)現(xiàn)怎么樣都不好用,隨即作了一下試驗(yàn),
代碼一
String str = new String("AND AAE112"); ?
str.replaceFirst("AND","");
System.out.println(str);
AND AAE112代碼二
String str = new String("AND AAE112"); ?
String out = str.replaceFirst("AND","");
System.out.println(out);
?AAE112可以看出,代碼二的結(jié)果是正確的,可見replaceAll并不會改變原有的str,這和PB和PL/SQL是不同的。原因應(yīng)該是str指向的是一個(gè)地址。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java使用http實(shí)現(xiàn)文件下載學(xué)習(xí)示例
這篇文章主要介紹了java使用http實(shí)現(xiàn)文件下載學(xué)習(xí)示例,需要的朋友可以參考下2014-04-04
基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法(分享)
下面小編就為大家分享一篇基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
SpringBoot整合Dubbo框架,實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動注冊和發(fā)現(xiàn)。今天就來看下SpringBoot整合Dubbo框架的步驟2021-06-06
SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(前端篇)
這篇文章主要介紹了SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(前端篇),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
基于python locust庫實(shí)現(xiàn)性能測試
這篇文章主要介紹了基于python locust庫實(shí)現(xiàn)性能測試,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例
本文主要介紹了spring 重復(fù)注解和aop攔截的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08

