`
xubaolin9
  • 浏览: 94219 次
社区版块
存档分类
最新评论

java String的split方法容易犯的错误

阅读更多

今天用split方法分割一个类似"1|2|20100312"的字符串,用Arrays.asList将String[]转成List,结果却是这样

[, 1, |, 2, |, 2, 0, 1, 0, 0, 3, 1, 2]

 

这问题遇到过多次, 搜索了一下, 下面链接算是一个解答

 

http://www.360doc.com/content/06/1212/13/14474_291159.shtml

 

列出几个要点

 

  1. 首先java doc里已经说明, split的参数是reg, 即正则表达式, 如果用"|"分割, 则需使用"\\|"
  2. 用* 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此, 因此也应加入"\\"
  3. 如果字符串中包含"\",首先这个字符串中的"\"需要转义, 即为"\\", 用split时需要写成split("\\\\"), 例子如下System.out.println(Arrays.asList("aaa\\bbb\\bccc".split("\\\\")));

          可以这样思考, 要写成用"\"分割,则首先需要转义"\\", 同时要让"\\"在正则表达式中有意义, 还需在第一个"\"和第二个"\"前面再加一个"\", 就变成了四个"\".

 

由此时引伸出几个事情, 也一并列出

  1. 这个问题已经遇到多次, 每次解决这种问题都要花10-20分钟, 这是不应该的, 说明我缺少总结, 成长的基础是把基础打牢, 打牢基础的方法是注意细节, 每个地方都节约一点时间, 都总结出经验, 至少效率上去了, 有了效率, 才有时间提升能力.
  2. 敏感, 用eclipse写代码时, 代码提示已经显示"".split(String regex), 但凡有点经验,这个regex一望而知, 使用split的时候也不会出现这个问题啦
  3. 代码设计上的问题, 我认为java API的设计存在一定问题, 既然是split, 我写啥您就用啥分割算啦, java用的却是regex, 现在我的观点是, java您莫如把split的名字改为splitByRegex, 功能一望而知, 免得无数人在上面载跟头
  4. regex,老兄我不熟呀, 赶紧补上吧

另外javaeye blog的自动保存功能, very good, 赞一个

 

 

分享到:
评论

相关推荐

    Java编码规范总结

    修复建议:String的split方法传递的参数是正则表达式,正则表达式本身用到的字符需要转义,如:句点符号“.”,美元符号“$”,乘方符号“^”,大括号“{}”,方括号“[]”,圆括号“()” ,竖线“|”,星号“*”,...

    Java Bug模式详解

    Java.Bug模式详解 第1章 混乱环境下的灵活方法 1.1 软件设计、实现和维护的趋势 1.1.1 对于稳定、安全 系统的需求增加 1.1.2 传统软件工程技 术的局限性 1.1.3 开放源代码的软 件项目的可利用性 1.1.4 对于...

    AIC的Java课程1-6章

     学会使用String.split方法,Scanner类,StringTokenizer类分解字符串。  [*]利用Formatter类的printf或format方法格式化输出字符串对象。(System.out对象封装了这两个方法)。 第10章 基本数据结构 ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1....

    Java NIO 聊天室 JSwing

    //selector的wakeup方法被调用,方法返回,而对于客户端来说,通道一直是被选中的 selector.select(); // 获得selector中选中的项的迭代器 Iterator ite = this.selector.selectedKeys().iterator(); while...

    微软JavaScript手册

    学习JAVA的好帮手,希望有所帮助。欢迎使用 JScript 语言参考 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要...

    达内客户端+聊天室源码

    String[] lis = Str.split("</li>");// 所有记录的数组 String[] jilu = null;// 单条记录的数组 String[][] allMsg = new String[lis.length - 1][4]; // 创建一个二维数组保存处理后的数据,其中每个一维...

    一个web爬虫的事例.txt

    String[] terms = p.split(searchString); for (int i = 0; i ; i++) { if (caseSensitive) { if (searchContents.indexOf(terms[i]) == -1) { return false; } } else { if (searchContents.indexOf(terms...

    Excel POI读取封装(文件+示范代码)

    List<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>( 0);// 存放其他数据集合 for (int i = startRow; i ; i++) {// 循环行 // ;i的范围是xls坐标中的数字(A‘1’,C‘10’) ...

    java猜字母游戏源码-reversing-sifas:关于爱生活全明星内部的信息

    java猜字母游戏源码这是我在逆向工程时收集和添加的有关爱现场所有明星内部的信息集合 这些信息属于公共领域。 随意使用它并重新发布它,但是你愿意 无头客户端之路 这是我从头开始对游戏进行逆向工程时写下的原始...

    Java-PHP-C#

    以下是解决的方法: ^(0│[1-9][0-9]*)$ "只有0和不以0开头的数字与之匹配",我们也可以允许一个负号再数字之前: ^(0│-?[1-9][0-9]*)$ 这就是: "0 或者 一个以0开头可能有一个负号在前面的数字." 好了, 好...

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    使用方法: java -jar lynload.jar,即可看到中文命令行参数(unix下需设置gbk字符集环境才能看中文,没gbk环境不能看中文,但不影响导入数据)。 特色: 1.同时支持多个数据库. 2.支持任意字符串作为列分隔符,什么...

    javascript forEach通用循环遍历方法

    上一次的错误太多,排版也出现了问题,重写了一遍,希望大家支持. 循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和Jquery的结合版本吧. var forEach = (function(){ //数组与伪数组的...

    JavaScript笔记

    |--String 对象的常用方法有: |--x.toLowerCase()、x.toUpperCase():大小写转换方法; |--x.charAt(index):返回指定位置的字符; |--x.charCodeAt(index):返回指定位置字符的Unicode编码; |--x.indexOf...

    Ext Js权威指南(.zip.001

    1.2.6 在java中使用json / 12 1.2.7 更多有关json的信息 / 15 1.3 ext js 4概述 / 15 1.4 ext js的开发工具的获取、安装与配置介绍 / 18 1.4.1 ext designer / 18 1.4.2 在visual studio中实现智能提示 / 23 ...

    正则表达式

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    asp.net知识库

    存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储...

    Tcl_TK编程权威指南pdf

    string命令 append命令 format命令 scan命令 binary命令 相关章节 第5章 tcl列表 tcl列表 构建列表 获取列表元素 修改列表 搜索列表 对列表进行排序 split命令 join命令 相关章节 第6章 控制结构...

Global site tag (gtag.js) - Google Analytics