A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙峰 黑马帝   /  2012-6-17 15:25  /  1845 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

做的小练习,为什么切割了,字符串数组长度成0了?

6 个回复

倒序浏览
本帖最后由 李海晓 于 2012-6-17 15:33 编辑

split运用了正则表达式
.点在正则表达是 是任意字符的意思  所以把所有的都去除了. 用 \.
可是\在java中有特殊含义  所以换成\\.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 李盼 于 2012-6-17 15:36 编辑

public class Test
{
        public static void main(String[] args )
        {
                String fileName = "djfowe.doc.avi.txt";
                getLastName(fileName);
        }
        public static void getLastName(String s)
        {
                String[] arr = s.split("\\.");
                System.out.println(arr.length);
        }
}
看我的代码。那个"."不能直接这么写,而是要写"\\."。split方法的参数是一个正则规则。
而点在正则里面是代表任意字符,而\.经过转移字符才是点,但是\本身也需要被转义,所以是\\.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 恭喜~~

查看全部评分

回复 使用道具 举报
  貌似是切割符号的问题
  你把它改成这样就可以了:
class  Demo4

{
        public static void main(String[] args)
        {
                String filename="sdfds,dg.gdfg,gfg";

                String[] arr= filename.split(",");//返回的是一个字符串数组

                System.out.println(arr.length);
               


               
          
               
               
        }
}
回复 使用道具 举报
  1. package com.heima.test;

  2. public class Test {
  3.         public static void main(String[] args) {
  4.                 String filename = "djfowe.doc.avi.txt";
  5.                 getLastName(filename);
  6.         }
  7.        
  8.         public static void getLastName(String str) {
  9.                 String[] arr = str.split("\\.");
  10.                 System.out.println(arr.length);
  11.                 System.out.println("该文件的扩展名是:" + arr[arr.length - 1]);
  12.                
  13.         }
  14. }
复制代码
"."需要转义,嘿嘿
回复 使用道具 举报
楼主 对正则表达式不是很熟悉啊,你要知道 split(String regex) 这个方法是怎么用的 看API 文档
需要一个 用字符串表示 的regex ,也就是正则表达式,
在正则表达式中  .   *  + ? \ 是有特殊含义的
.表示任意的一个字符
*表示的是零个或多个字符
+表示的是一个或多个字符
?表示零个或一个
而且java里面所有的正则表达式都学要这个来表示
而且 / 是用来转义的,
在默认的情况下,比如 你的方法里 split(".") 中的那个 "."是表示任意的字符的
必须写成这样split("\\.");
到这里 又不得不说反斜杠(\)
在java里面 使用两个反斜杠(\\)来表示一个转义功能的反斜杠(\) 如果你想用普通的反斜杠来分割字符串
就必须这样写 split("\\\\");这样来表示一个普通的反斜杠(\)建议楼主多看下java.util.regex包中
matcher
pattern  这两个类
正则表达式利器!

回复 使用道具 举报
我在做这个的时候也遇到过这样的问题,split(".")中那个点它会看成是一个任一字符,所以无法判断是用什么来分割的,这个需要你来用String类里的replaceAll()方法用其他的符号(反斜杠或?等)来替换“.”,然后再用split()方法来分割,希望采纳!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马