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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

基础测试里那道求文件后缀名的题目,看完后第一个思路是用String的split方法用“.”把得到的字符串分割成String数组,然后取出该数组最后一个元素就是该文件的后缀名,但是实际测试的时候行不通,用“.'分割的时候不成功,分割后的数组是空的,长度为零,而用其他字符分割就可以,不知道为什么,有知道的么?


另:后来分成char[]数组做出来了,想知道大家用的是什么方法做出来,有兴趣的同学留下你的解决方法,就当是分享吧!

没做出来的代码如下 :
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileTest {


        public static void main(String[] args)  {
                File f = new File("aaaa.txt.mp3.java");
                String fileName = f.getName();
                String[] fileNameArray = fileName.split(".");
                System.out.println(fileNameArray.length);//打印出来长度为零,不解,用“t”或者其他字母就不是
               
        }
                       
}


评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
实际上String的split方法传的参数,底层使用的就是正则表达式,而"."这个符号在正则表达式中有其特殊含义:表示任意字符。故没有办法直接使用"."而要将其转义:                                                                          String str = "lisi.wangwu.zhaoliu";
//String[] arr = str.split(".");//这行代码错误String[] arr = str.split("\\.");//"\."这个符号中的第一个"\"会被转义,故再添加一个

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real.How.To";
    // bad
    System.out.println(java.util.Arrays.toString(
        testString.split(".")
    ));
    // output : []

    // good
    System.out.println(java.util.Arrays.toString(
      testString.split("\\.")
    ));
    // output : [Real, How, To]
  }
}


split()中用点不太好。用//.内部转义一下就OK了
我已经测试了  可以的

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
  1. public class Test4 {
  2.         public static void main(String args[])
  3.         {       
  4.                 String s;
  5.                 System.out.println("请输入一个文件名:");
  6.                 Scanner input=new Scanner(System.in);
  7.                 s=input.next();
  8.                 System.out.println("该文件的扩展名为:"+s.substring(s.lastIndexOf('.')+1));       
  9.         }

  10. }
复制代码
回复 使用道具 举报
哦   是这个   \\.      刚才打错了   
回复 使用道具 举报
String[] fileNameArray = fileName.split(".");改成String[] fileNameArray = fileName.split("\\.");
回复 使用道具 举报
海林 黑马帝 2011-11-9 11:22:09
7#
不禁是.     还有 |   也是呢?      ?那个发表于3分钟前的 怎么在我之前呢?
回复 使用道具 举报
张翼 黑马帝 2011-11-10 15:59:04
8#
本帖最后由 张翼 于 2011-11-10 16:00 编辑

public class acc
{
     public static void main(String argv[])
     {
             
         int index=0;  
             char filename[]={'a','b','c','.','t','x','t'};
             for(int i=0;i<filename.length;i++)
                if(filename=='.')
                 index=i;
             for(int i=index+1;i<filename.length;i++)
              System.out.print(filename);

     }
}   
将文件名按字符数组来复制,然后通过for遍历部分数组,一旦找到'.‘,就开始输出。
根本不用JAVA API,其实是一个C语言上经典的小程序,只不过通过Java写一遍罢了。
运行结果:txt
回复 使用道具 举报
张志东 黑马帝 2011-11-10 16:05:25
9#
张翼 发表于 2011-11-10 15:59
public class acc
{
     public static void main(String argv[])

后来我也是用这个方法做出来的
回复 使用道具 举报
郭学文 黑马帝 2011-11-10 16:09:59
10#
找了下我之前做的
  1.         答://取得点'.'最后一次出现的位置,加上1即为后缀名的开始位,再从此位取此位
  2.         //到结尾的子字符串。
  3.         String str = "kkk.java.txt";
  4.         String suf= str.substring(str.lastIndexOf('.')+1);
  5.         //结果:suf="txt"
复制代码
回复 使用道具 举报
可以找到最后一个“.”的位置索引,然后从这个索引开始截取字符到最后不就行了,干嘛非要那么麻烦呢?!
回复 使用道具 举报
        public static void main(String[] args)
        {
                String t2 = "test2.java.txt";
                System.out.println(t1.substring(t1.lastIndexOf(".")+1));
                System.out.print("文件名为:" + t2 +"的后缀是:");                               
                System.out.println(t2.substring(t2.lastIndexOf(".")+1));
               
                //lastIndexOf(String str)  返回指定子字符串在此字符串中最右边出现处的索引。
                //sbuSringsubstring(int beginIndex) 在原有的字符串中生成一个新的字符串以输入的角标下一个开始
        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马