A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂沙漠 中级黑马   /  2014-3-24 00:18  /  1209 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将姓名中的名替换为*
  1. String name = "王丹";
  2.                 System.out.println(name.replaceAll("(.).+", "$1*"));   
复制代码
这里打印出 王*
那如果是王丹青,那只能打印出 王*
但我有个需求就是,王丹青对应打印出 王**,欧阳丹青 对应打印出 欧阳**,这个正则表达式该如何呢?




评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

倒序浏览
午夜b'Boy 来自手机 中级黑马 2014-3-24 01:00:54
沙发
这个不用正则也可以,建立一个百家姓字符数组,只要要验证的字符串startsWith百家姓的元素,则为此姓加上相应长度的*即可

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
好像没搞出来
不过你这个可以通过这个方法解决
                String name = "王丹";
                for (int i = 1; i < name.length(); i++) {
                        name=name.replace(name.charAt(i)+"", "*");
                }
                System.out.println(name);

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
午夜b'Boy 发表于 2014-3-24 01:00
这个不用正则也可以,建立一个百家姓字符数组,只要要验证的字符串startsWith百家姓的元素,则为此姓加上相 ...

这也一种解决方式,但每个名字都要和百家姓去匹配,不觉得有点效率低么
回复 使用道具 举报
osully 发表于 2014-3-24 09:30
好像没搞出来
不过你这个可以通过这个方法解决
                String name = "王丹";

这个倒是可以,但是否可以用正则表达式处理下呢
回复 使用道具 举报
  1. package com.blog;

  2. import java.util.Arrays;

  3. public class blog10{
  4.         public static void main(String[]args){
  5. String str=new String("欧丹青");
  6. System.out.println(str.replaceAll("\\S\\S\\b","**"));


  7.         }
  8.        
  9. }
复制代码
求给分

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这个正则表达式只能匹配名字是两个字的,如果名字是一个字如欧阳峰,会出错,最好是用查百家姓的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马