前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的坑之方括号 原

Java中的坑之方括号 原

作者头像
云飞扬
发布2019-03-13 10:17:27
2K0
发布2019-03-13 10:17:27
举报
文章被收录于专栏:星汉技术星汉技术

这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。

问题描述

在做数据统计的时候,遇见了如下形式的数据:

代码语言:javascript
复制
[[2018-08-16 09:05:39, 2018-08-16 10:40:56], [2018-08-16 11:00:05, 2018-08-16 13:05:06], [2018-08-16 15:06:30, 2018-08-16 19:45:36]]

这是一条字符串,需要对这个字符串进行处理,提取出时间段,不要日期。那么这个应该很好处理的了,写一个方法,直接对字符串进行分割就ok了,那么接下来是本人写的方法:

代码语言:javascript
复制
    public static void main(String[] args) {
        String data="[[2018-08-16 09:05:39, 2018-08-16 10:40:56], [2018-08-16 11:00:05, 2018-08-16 13:05:06], [2018-08-16 15:06:30, 2018-08-16 19:45:36]]";
        String[] string=data.split("], [");
        for (String string2 : string) {
            System.out.println(string2);
        }
}

这代码看上去没有任何问题,编译时期也没有报错,可是运行时期就报错了,错误如下:

代码语言:javascript
复制
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 3
], [
   ^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.clazz(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at cn.com.xh.test.Test01.main(Test01.java:7)

猜想

看这错误命名知道是哪个位置错误了,那么就开始本人的猜想,第一个猜想:难道是不能使用多个字符作为分隔符吗?

将分隔符选为单个的逗号“,”,分割没有问题。 运行结果如下:

代码语言:javascript
复制
[[2018-08-16 09:05:39
 2018-08-16 10:40:56]
 [2018-08-16 11:00:05
 2018-08-16 13:05:06]
 [2018-08-16 15:06:30
 2018-08-16 19:45:36]]

接着我又将逗号后面的空格添加上,分隔符就为一个逗号,一个空格了,运行结果如下:

代码语言:javascript
复制
[[2018-08-16 09:05:39
2018-08-16 10:40:56]
[2018-08-16 11:00:05
2018-08-16 13:05:06]
[2018-08-16 15:06:30
2018-08-16 19:45:36]]

结果没有问题,这个猜想推翻。

第二个猜想:应该是个别字符引起的,难道是个别字符不能作为分隔符使用?

然后又加上了后半个方括号“]”,分隔符现在是这样的“], ”(方括号逗号空格)运行结果如下:

代码语言:javascript
复制
[[2018-08-16 09:05:39, 2018-08-16 10:40:56
[2018-08-16 11:00:05, 2018-08-16 13:05:06
[2018-08-16 15:06:30, 2018-08-16 19:45:36]]

运行又没有问题,正是这个结果的出现,误导了本人,本人当时的想法是,后半个方括号没问题,前半个应该也没有问题,然后就没有进行前半个的测试。 全部写上又报错,是不是要疯了。问题究竟出现在哪里了呢?

最终猜想:测试一下前半个方括号吧。

在百思不得其解的情况下,我将分隔符设为了单个的前半个方括号,运行结果如下:

代码语言:javascript
复制
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 0
[
^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.clazz(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at java.lang.String.split(Unknown Source)
    at cn.com.xh.test.Test01.main(Test01.java:7)

错误很明显了,那就是前半个方括号引起的,那么是什么问题引起了前半个括号不能作为分隔符呢?也不是不能作为分隔符,而是需要转义,这就是我上面说的误导的意思,一个括号,前半截需要转义,后半截不需要转义,是不是很坑?而且本人先用的还是后半截。 当本人把代码改为如下这样,运行就完全没有问题了。

代码语言:javascript
复制
    public static void main(String[] args) {
        String data="[[2018-08-16 09:05:39, 2018-08-16 10:40:56], [2018-08-16 11:00:05, 2018-08-16 13:05:06], [2018-08-16 15:06:30, 2018-08-16 19:45:36]]";
        String[] string=data.split("], \\[");
        for (String string2 : string) {
            System.out.println(string2);
        }
}

运行结果如下:

代码语言:javascript
复制
[[2018-08-16 09:05:39, 2018-08-16 10:40:56
2018-08-16 11:00:05, 2018-08-16 13:05:06
2018-08-16 15:06:30, 2018-08-16 19:45:36]]

总结

针对方括([])使用的时候,最好是都加上转义字符,这样就不至于出现这么微小的错误,虽然这个错误不是很大,但是很闹心,稍不留神就会浪费时间在这上面,上面也是出现问题解决的一个思路。

针对java中需要转义的字符,本人在网上做了个收集,暂时列出以下几种,防止自己以后再粗心大意:

美元符号$、小括号()、星号*、加号+、点.、方括号[]、问号?、反斜杠\\、异或^、大括号{}、或|、

如果还有,今后再进行补充。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/08/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 猜想
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档