如何使用 String 类的 replaceAll 方法来使得「张三」替换为「**三」? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Zeahoo
V2EX    Java

如何使用 String 类的 replaceAll 方法来使得「张三」替换为「**三」?

  •  
  •   Zeahoo 2016-07-28 12:20:53 +08:00 4127 次点击
    这是一个创建于 3394 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面的方法能够解决问题

     /* * 若真实姓名为 张三 * 则返回 **三 */ public static String realName(String realName){ if(realName == null) return null; char[] charArray = realNae.toCharArray(); return "**" + charArray[charArray.length - 1]; } 

    实现方式能不能用 replaceAll 的办法?

     public static String realName(String realName){ if(realName == null) return null; return realName.replaceAll("(\\w+)(\\w)", "**$2"); } 

    正则中 w 不支持中文。

    24 条回复    2016-07-30 18:30:49 +08:00
    v1024
        1
    v1024  
       2016-07-28 12:27:31 +08:00 via iPhone
    JS :
    "**" + "胡汉三".split("").pop()
    Zeahoo
        2
    Zeahoo  
    OP
       2016-07-28 12:30:27 +08:00
    @v1024 不应该交给前端来做这件事吧,应该要后端来把名称给隐藏后再返回给前端,这样应该会好些。
    BuilderQiu
        3
    BuilderQiu  
       2016-07-28 12:44:02 +08:00   3
    正则换成: ^.*(.)$
    Zeahoo
        4
    Zeahoo  
    OP
       2016-07-28 12:47:13 +08:00
    @BuilderQiu 成功了~感谢!
    caixiexin
        5
    caixiexin  
       2016-07-28 12:50:21 +08:00
    public static void main(String[] args) {
    String name = "张三";
    String name2 = name.replaceAll("([\\u4e00-\\u9fa5])([\\u4e00-\\u9fa5])","**$2");
    System.out.println(name2);
    }
    v1024
        6
    v1024  
       2016-07-28 13:37:42 +08:00
    @Zeahoo Node.js  啊。我就凑个热闹,没看见是java节点。
    Bryan0Z
        7
    Bryan0Z  
       2016-07-28 15:15:00 +08:00 via Android
    为啥你写的这么烦
    "**"+string.charAt(string.length());
    一行不就好了
    xcodebuild
        8
    xcodebuild  
       2016-07-28 15:24:49 +08:00
    让前端隐藏是掩耳盗铃。。
    icaca
        9
    icaca  
       2016-07-28 16:01:28 +08:00
    select 的时候直接处理好
    hoperuin
        10
    hoperuin  
       2016-07-28 16:28:08 +08:00   1
    想不明白了,为什么要这么复杂呢?看下面 demo
    public class Test {
    public static void main(String[] args) {
    String s = "哈哈张三我哈哈哈张三哦";
    System.out.println(s.replaceAll("张三","**三"));
    }
    }

    输出:
    哈哈**三我哈哈哈**三哦
    Bryan0Z
        11
    Bryan0Z  
       2016-07-28 17:10:00 +08:00 via Android
    @hoperuin 因为他是任意两个字的中文名?
    dullwit
        12
    dullwit  
       2016-07-28 17:14:50 +08:00   3
    看到 string 判断用 == null ,我心情就紧张起来了
    21grams
        13
    21grams  
       2016-07-28 17:39:23 +08:00 via Android
    @hoperuin 我也是这么想的,不是很简单吗
    Sunshow
        14
    Sunshow  
       2016-07-28 19:00:17 +08:00
    别浪,踏踏实实用 StringUtils
    Cabana
        15
    Cabana  
       2016-07-28 19:31:33 +08:00 via Android
    ==null …你会吃亏的
    Zeahoo
        16
    Zeahoo  
    OP
       2016-07-28 19:49:54 +08:00
    @Cabana 刚实习……不懂,说一下原因。。。好怕啊你们说的
    Zeahoo
        17
    Zeahoo  
    OP
       2016-07-28 19:50:17 +08:00
    @dullwit 求教一下,说得我好怕
    Zeahoo
        18
    Zeahoo  
    OP
       2016-07-28 19:51:30 +08:00
    @Bryan0Z 因为要把它写在工具类里面,其他都是正则写的, &_& 小强迫症
    bp0
        19
    bp0  
       2016-07-29 09:20:42 +08:00
    考虑复姓的情况了吗? 欧阳三,应该换成“**三”,而不是“**阳三”吧?
    thinkmore
        20
    thinkmore  
       2016-07-29 09:52:21 +08:00
    占坑问问题!!

    同问一个问题,我现在前台输入字符串,然后解析规则是:将逗号转义为\c ,然后将\转义成为\\,然后存入数据库。

    此时如果我从数据库取出的数据是\\c ,如何将其转义为\,

    如果前台输入的是\c 这种怎么办?

    请问 java 或者 js 有什么好的方法吗?
    Zeahoo
        21
    Zeahoo  
    OP
       2016-07-29 12:59:06 +08:00
    @bp0 不管姓名有多长,只需要显示最后一个字就行了,考虑到了~
    chocotan
        22
    chocotan  
       2016-07-29 16:06:49 +08:00
    [charArray.length - 1]
    当传入的是""字符串的时候会抛异常
    Bryan0Z
        23
    Bryan0Z  
       2016-07-29 23:38:11 +08:00 via Android
    @dullwit
    @Cabana
    求问,正确方法是什么,以及为什么不能用==null
    haniklz
        24
    haniklz  
       2016-07-30 18:30:49 +08:00 via Android
    难道不是替换人名中的姓?用正则表达式性能多低啊 直接 length 大于 1 时 返回 **+substring(1)不好么。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2984 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 12:56 PVG 20:56 LAX 04:56 JFK 07:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86