watfgzs的gravatar头像
watfgzs 2014-11-13 17:26:41

Java程序中如何使用正则表达式移除字符串中的某个数字?

     //问题:Java程序中使用正则表达式移除某个数字    
        //可能出现的两种字符串
        String str1="1@12@145@34";//第一种开头没有@
        String str2="@1@12@145@34";//第二种以@开头
        
        //可能出现的移除情况
//        1、移除中间的某个数字,比如移除12  
//                 1@145@34 
//                @1@145@34
//        2、移除末尾的数字
//                 1@12@145
//                @1@12@145
//        3、移除开头的数字
//                @12@145@34
//                @12@145@34

 

正则俺用的不熟,哪位牛牛能帮忙解决一下?

-------------------------------------------------------------------------------------

问题补充:

        问题出自对权限的管理,角色的id用@分割
        ----------------------------------------------
        | 菜单名称    | 能访问该菜单的角色id集合 |
        ----------------------------------------------
        | 菜单1       |  1@12@145@34           
        ----------------------------------------------
        | 菜单2       |  @1@12@145@34          
        ----------------------------------------------
        
        现在要从“菜单1”可访问角色id集合中移除id=1的角色
        菜单1移除后:@12@145@34
        菜单2移除后:@12@145@34
        
        现在要从“菜单1”和“菜单2”可访问角色id集合中移除id=12的角色
        菜单1移除后:1@12@145
        菜单2移除后:@1@12@145
        
        现在要从“菜单1”和“菜单2”可访问角色id集合中移除id=34的角色
        菜单1移除后: 1@12@145   或者是  @1@12@145
        菜单2移除后:@1@12@145
        
        
        移除不想要的角色id,保证移除后的角色集合还是以@进行分割的,使用正则表达式实现

所有回答列表(5)
watfgzs的gravatar头像
watfgzs  LV21 2014年11月13日

没有人能帮我解决吗?我不知道单纯的正则能不能帮我解决,我提供我现在的解决方式

        String string="1@12@125@34";//第一种开头没有@
        
        StringBuilder sb=new StringBuilder(string);
        //如果前面不存在@,那么就添加一个@
        if(!"".equals(sb.toString())&&!"@".equals(sb.charAt(0)+"")){
            sb.insert(0,"@");
        }
        
        String str=sb.toString();
        System.out.println("替换之前:"+str);
        
        String a=str.replaceAll("@1\\b", "");
        System.out.println("替换开头的1:"+a);
        
        String b=str.replaceAll("@34\\b", "");
        System.out.println("替换结尾的34:"+b);
        
        String c=str.replaceAll("@12\\b", "");
        System.out.println("替换中间的12:"+c);

leenleebei的gravatar头像
leenleebei  LV2 2014年11月14日

能不能把问题说清楚点。都不知道你要表达什么。

海波的gravatar头像
海波  LV4 2014年11月14日

问题没清楚,需求不明确

tang9140的gravatar头像
tang9140  LV2 2014年11月14日
    /**
     * <字符串处理,去某个ID>
     * @param s
     * @param number
     * @return
     */
    public static String delId(String s, int id) {
        if(s.charAt(0) != '@'){
            s = '@' + s;
        }
        if(s.charAt(s.length() - 1 ) != '@'){
            s = s + '@';
        }
        String result = s.replace("@" + id + "@", "@");
        return result;
    }

 

aitixiaozi的gravatar头像
aitixiaozi  LV22 2014年11月15日

你现在这个就是一个菜单权限管理的功能,我觉得你这样设计权限数据结构不太好,为什么要这样设计呢?

假如你删除某个菜单权限,我觉得最简单的方法就是,使用 String [] strs =  str.split("@");这样得出一个当前菜单的所有权限值,然后再一个个(strs[i].equels."34"),如果成立了就删除此数组的值,然后把此数组重新循环拼接成你需要保存的数据字符串!!这样你觉得可以吗?

 

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友