java字符串处理常见问题(不断补充)

  一、字符串相关函数的操作 1、indexOf(String str, int fromIndex)//返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 说明:字符串的索引从0开始! 2、substring(int beginIndex, int endIndex)//返回一个新字符串,它是此字符串的一个子字符串。 说明:返回的字符串是beginIndex~endIndex-1,因此得到的字符串长度为endIndex-beginIndex
  例如:"hamburger".substring(4, 8) return "urge" 3、replaceAll(String regex, String replacement)//使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 说明:
  (1)、以为 str.replaceAll("ab","b");就把str中的所有"ab"换成了"b"!注意,这个函数是将替换后的字符串返回了。因此应该str=str.replaceAll("ab","b");
  (2)、
  4、split(String regex)//根据给定正则表达式的匹配拆分此字符串。返回String[] 说明:
  (1)、String str=""," ",null,这三者的区别。
  "",分配了内存,但值为空,length=0;java中不存在像C/C++中那样字符串后面有"\0"
  " ",分配了内存,值为空格,length=1,对应一个ASCII码
  null,没有分配内存,无法引用.length(),仅将str引用置为null,表示无引用~
  (2)、String[] xy = new String[0];
  在Java中允许创建一个大小为0的数组,也就是说"int[] emptyArray = new int[0];"在Java中是正确的。这样的数组没有分配空间?。用处是:当返回数组中元素为0时,可以不用返回null,而是返回一个[0]的数组,引用时不会像引用null那样出现异常!。当然,大小为负数的数组在Java中是不被允许的。 (3)、split()函数中会出现很奇怪的问题,例如http://www.cnblogs.com/liubiqu/archive/2008/08/14/ 1267867.html
  eg..1:
  String s = "abc";
  String[] keys = s.split("");
  结果:keys长度为4,值分别为"",a,b,c。至今未能弄明白数组的第一个元素从何而来?
  eg..2:
  String s = " abc";//第一个位置上是空格
  String[] keys = s.split(" ");//中间是空格
  结果:keys长度为2,值为"",abc,也就是"空格"是分隔符!,这种才能通过空格来分割字符串,注意,不是第一种那样做!
  注意:s=" ab",则用空格分开后的keys长度为3,分别为"","",ab。
  而s="ab ",则空格分开后的keys长度为1,是ab。这说明字符串中第一个字符是否为空格这一条件很重要!
  若s=" ",则空格分开后的keys长度为0,说明字符串中是否有字符也很重要。
  eg..3:
  String s = " abc";
  String[] keys = s.split("x");//字符串中不存在的字符
  结果:keys长度为1,值为" abc"。
  说明:如果split的字符串中不含有该子串,则返回原字符串!
  eg..4:
  String s = "abc";
  String[] keys = s.split(".");//特殊字符,若不转义("\\."),则会无法split,返回数组个数为0!
  结果:keys长度为0!
  说明:split无法进行后,不会返回一个null,而是返回一个大小为0的数组。这样程序更加健壮! 二、其他
  5、java中char和int间的转化:
  char可以直接转为int:
  char x = 'A'; int y = x;
  int转char则需要强制转换!
  x=(char)y;
  6、正则匹配字符串。
  String s = "abcd";
  System.out.println(s.match("[a-zA-Z]*"));//print true

你可能感兴趣的:(技术杂绘)