黑马程序员技术交流社区

标题: 正则表达式替换功能的一些使用 [打印本页]

作者: 疯狂沙漠    时间: 2014-3-24 00:18
标题: 正则表达式替换功能的一些使用
将姓名中的名替换为*
  1. String name = "王丹";
  2.                 System.out.println(name.replaceAll("(.).+", "$1*"));   
复制代码
这里打印出 王*
那如果是王丹青,那只能打印出 王*
但我有个需求就是,王丹青对应打印出 王**,欧阳丹青 对应打印出 欧阳**,这个正则表达式该如何呢?





作者: 午夜b'Boy    时间: 2014-3-24 01:00
这个不用正则也可以,建立一个百家姓字符数组,只要要验证的字符串startsWith百家姓的元素,则为此姓加上相应长度的*即可
作者: osully    时间: 2014-3-24 09:30
好像没搞出来
不过你这个可以通过这个方法解决
                String name = "王丹";
                for (int i = 1; i < name.length(); i++) {
                        name=name.replace(name.charAt(i)+"", "*");
                }
                System.out.println(name);
作者: 疯狂沙漠    时间: 2014-3-24 11:05
午夜b'Boy 发表于 2014-3-24 01:00
这个不用正则也可以,建立一个百家姓字符数组,只要要验证的字符串startsWith百家姓的元素,则为此姓加上相 ...

这也一种解决方式,但每个名字都要和百家姓去匹配,不觉得有点效率低么
作者: 疯狂沙漠    时间: 2014-3-24 11:07
osully 发表于 2014-3-24 09:30
好像没搞出来
不过你这个可以通过这个方法解决
                String name = "王丹";

这个倒是可以,但是否可以用正则表达式处理下呢
作者: yanzhendong    时间: 2014-3-24 11:42
  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. }
复制代码
求给分
作者: yanzhendong    时间: 2014-3-24 11:45
这个正则表达式只能匹配名字是两个字的,如果名字是一个字如欧阳峰,会出错,最好是用查百家姓的方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2