Java中String的split()方法的一些需要注意的地方

项目中我用到了字符串的split()方法,为这种方法的方便称赞,可是程序在测试的时候出现的问题折腾了我好久,原来在使用的时候存在着以下几个需要注意的地方。

本来使用split()方法是判断String的数量,结果这么的不靠谱,最后换成了hashset动态添加字符串,然后求hashset.size()的方法得到字符串的个数解决的。。。。

Java代码  

  1. public String[] split(String regex, int limit)

split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数(可选)的含义详见官方API说明

我在做项目期间曾经遇到一个“bug”,就是当split函数处理空字符串时,返回数组的数组竟然有值。。。查完API才发现就是这么规定的。

官方API 写道

If the expression does not match any part of the input then the resulting array has just one element, namely this string.

原来我不能小看空字符串,它也是字符串的一种,当split函数没有发现匹配的分隔符时,返回数组就只包含一个元素(该字符串本身)。以为这样就结束了,幸亏我做了几个试验,忽然又发现了一些问题,代码如下:

Java代码  

  1. public class Split {
  2. public static void main(String[] args) {
  3. String str1 = "a-b";
  4. String str2 = "a-b-";
  5. String str3 = "-a-b";
  6. String str4 = "-a-b-";
  7. String str5 = "a";
  8. String str6 = "-";
  9. String str7 = "--";
  10. String str8 = "";   //等同于new String()
  11. getSplitLen(str1);
  12. getSplitLen(str2);
  13. getSplitLen(str3);
  14. getSplitLen(str4);
  15. getSplitLen(str5);
  16. getSplitLen(str6);
  17. getSplitLen(str7);
  18. getSplitLen(str8);
  19. }
  20. public static void getSplitLen(String demo){
  21. String[] array = demo.split("-");
  22. int len = array.length;
  23. System.out.print("\"" + demo + "\"长度为:" + len);
  24. if(len >= 0){
  25. for(int i=0; i<len; i++){
  26. System.out.print(" \""+array[i]+"\"");
  27. }
  28. }
  29. System.out.println();
  30. }
  31. }

运行结果:

"a-b"长度为:2 "a" "b"
"a-b-"长度为:2 "a" "b"
"-a-b"长度为:3 "" "a" "b"
"-a-b-"长度为:3 "" "a" "b"
"a"长度为:1 "a"
"-"长度为:0
"--"长度为:0
""长度为:1 ""

和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下:

  1. 当字符串只包含分隔符,返回数组没有元素;
  2. 当字符串不包含分隔符时,返回数组只包含一个元素(该字符串本身);
  3. 字符串最尾部出现的分隔符可以看成不存在,不影响字符串的分隔;
  4. 字符串最前端出现的分隔符将分隔出一个空字符串以及剩下的部分的正常分隔;

Java中String的split()方法的一些需要注意的地方

时间: 2024-10-22 07:04:24

Java中String的split()方法的一些需要注意的地方的相关文章

【转载】Java中String类的方法及说明

转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(Strin

Java中String类的方法及说明

String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(StringBuffer buffer):通过StringBuffer数组构造字符串对象.  例如:      byte[] b = {'a',

java中String的.trim()方法

该方法去除两边的空白符 原理: 看看源码实现 public String trim() { int len = value.length; int st = 0; char[] val = value; /* avoid getfield opcode */ while ((st < len) && (val[st] <= ' ')) { st++; } while ((st < len) && (val[len - 1] <= ' ')) { le

java中string类的方法和加密程序

String.equals()方法: 是对String对象所封装的字符串内容进行比较,也就是说,如果两个String对象所封装的字符串内容相同(包括大小写相同),则equals()方法将返回true. String类的length(),char(),getChar(),replace(),toUpperCase(),tolowerCase(),trim(),tocharArray()使用说明 Length()求字符串长度 Char()获取给定的index处的字符 getChar()字符转换成数组

java中String类intern()方法探索

想到什么写什么,会有点乱,意思理解就行 首先我们创建两个字符串对象,如下: String a = new String("hx"); String b = new String("h")+new String("x"); 通过new关键字创建字符串对象时,会同时在堆和常量池中生成两个对象,比如说上面的第一条语句产生两个内容均为"hx"的对象,一个在堆中,一个在常量池中,a引用的是堆中的对象,内容是"hx";

Java中String类(字符串操作)的10个常见问题和解决方法

注:来自百度搜索,还没有码一遍,一定要码!! 1. 字符串比较,使用 "==" 还是 equals() ?简单来说, "==" 判断两个引用的是不是同一个内存地址(同一个物理对象).而 equals 判断两个字符串的值是否相等.除非你想判断两个string引用是否同一个对象,否则应该总是使用 equals()方法.如果你了解 字符串的驻留 ( String Interning ) 则会更好地理解这个问题 2. 对于敏感信息,为何使用char[]要比String更好?

Java中String类与Integer类的几个方法

计算诸如-123,456,789 + 123,123的值 import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); String str1, str2; BigInteger a, b; while(cin.hasNext()){ str1 = cin.

Java中String转int型的方法以及错误处理

应要求,本周制作了一个判断一个年份是否是闰年的程序.逻辑很简单,这里就不贴代码了.可是,在这次程序编写中发现了一个问题. 在输入年份时,如果输入1)字母2)空3)超过Int上限时,就会抛exception. 问题出在String转Int型时. 首先,在java中String转换为Int主要有两种方法 1.Integer.parseInt(s) 2.Integer.valueOf(s).intValue(); 这两种方法略有不同,之后再跟大家分析. 首先我使用第一种方法,当测试数据为正常的年份时,

java中String的常用方法

java中String的常用方法1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2.charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b' 3. getChars() 截取多个字符 void getChars(int sourceStart,int sourceEnd,char target[]