V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Zeahoo
V2EX  ›  Java

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

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

    下面的方法能够解决问题

      /*
       * 若真实姓名为 张三
       * 则返回 **三
       */
      public static String realName(String realName){
        if(realName == null) return null;
        char[] charArray = realName.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   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:37 · PVG 19:37 · LAX 03:37 · JFK 06:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.