Java使用正则表达式&使用Map.get方法

Java编程实验课中使用到了正则表达式和Map.get方法,因为本人也遇到了很多问题,这里总结一下。

正则表达式

基础的语法就不讲了。这个网上有一堆基本用法和教程。来说一下我个人通过这次实验理解的。

正则表达式可以取或。

  这是什么意思呢,就是如果我有两个判断条件,并不需要写使用两个Pattern类和Matcher类对两个表达式分别判断。只需要将两个表达式取或,就可以。用我的实验代码来说吧。

String regex = "^@[A-Za-z0-9-_]{1,}|[^A-Za-z0-9-_]{1,}@[A-Za-z0-9-_]{1,}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher;

这里这个regex就是我的正则表达式,其实是两个表达式的或,"^@[A-Za-z0-9-_]{1, }"和"[^A-Za-z0-9-_]{1, }@[A-Za-z0-9-_]{1, }"。具体表达式是什么意思就不细说了,我只是想通过这个例子说明,正则表达式是可以取或的。希望能帮助到初学者。

Map.get方法

还是同一个实验,用到了Map,其实这个问题的发现还是对Map类不熟悉,这里总结一下。

问题的产生是我用到了一个这样的Map:Map<String, Set<String>>然后需要通过key的值找到对应的value,在value中add一个新的String。一开始我是这样写的

Set<String> old = Map.get(key);
old.add(Name);

然后问题就产生了。

我发现Map中所有跟old相同的Set中都添加了这个Name变量。很尴尬,这样我的程序不会崩溃,但是结果是不对的。

如果还没有理解我的问题,我就举一个例子。

比如一开始我的Map中键值对是:

{a = [able, athlete], b = [able], c = [able, athlete]}

然后我通过Map.get(a)找到了Set<String> old,接下来使用old.add("alike")。最后我发现Map变成了

{a = [able, athlete, alike], b = [able], c = [able, athlete, alike]}

c的value值也被改变了。

上网查阅也有同样的问题,考虑是因为Map为了节省空间,将相同的Set存在了同一个内存空间中,而且get方法得到的是引用,对某一个Set的修改会将内存空间中的内容修改,造成所有相同的Set都被修改。但是这只是个人的考虑,没有验证。

最后解决办法当然是自己手动copy一个新的Set出来了,然后add之后put回去,就会把原来的Set覆盖。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值