Zeahoo
V2EX  ›  Java

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

  •  
  •   Zeahoo · Jul 28, 2016 · 4969 views
    This topic created in 3754 days ago, the information mentioned may be changed or developed.

    下面的方法能够解决问题

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

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

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

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

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

    请问 java 或者 js 有什么好的方法吗?
    Zeahoo
    Zeahoo
    OP
    Jul 29, 2016
    21
    @bp0 不管姓名有多长,只需要显示最后一个字就行了,考虑到了~
    chocotan
    chocotan
    Jul 29, 2016
    22
    [charArray.length - 1]
    当传入的是""字符串的时候会抛异常
    Bryan0Z
    Bryan0Z
    Jul 29, 2016 via Android
    23
    @dullwit
    @Cabana
    求问,正确方法是什么,以及为什么不能用==null
    haniklz
    haniklz
    Jul 30, 2016 via Android
    24
    难道不是替换人名中的姓?用正则表达式性能多低啊 直接 length 大于 1 时 返回 **+substring(1)不好么。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   696 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    ♥ Do have faith in what you're doing.