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

2016-07-28 12:20:53 +08:00
 Zeahoo

下面的方法能够解决问题

  /*
   * 若真实姓名为 张三
   * 则返回 **三
   */
  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 不支持中文。

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

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

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

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

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

请问 java 或者 js 有什么好的方法吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/295484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX