黑马程序员技术交流社区
标题: 基础测试里的一个小问题,没解决,有兴趣的进来看一下 [打印本页]
作者: 张志东 时间: 2011-11-9 10:52
标题: 基础测试里的一个小问题,没解决,有兴趣的进来看一下
基础测试里那道求文件后缀名的题目,看完后第一个思路是用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”或者其他字母就不是
}
}
作者: 绿影 时间: 2011-11-9 11:16
实际上String的split方法传的参数,底层使用的就是正则表达式,而"."这个符号在正则表达式中有其特殊含义:表示任意字符。故没有办法直接使用"."而要将其转义: String str = "lisi.wangwu.zhaoliu";
//String[] arr = str.split(".");//这行代码错误String[] arr = str.split("\\.");//"\."这个符号中的第一个"\"会被转义,故再添加一个
作者: 海林 时间: 2011-11-9 11:17
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了
我已经测试了 可以的
作者: 宁超 时间: 2011-11-9 11:18
- public class Test4 {
- public static void main(String args[])
- {
- String s;
- System.out.println("请输入一个文件名:");
- Scanner input=new Scanner(System.in);
- s=input.next();
- System.out.println("该文件的扩展名为:"+s.substring(s.lastIndexOf('.')+1));
- }
- }
复制代码
作者: 海林 时间: 2011-11-9 11:18
哦 是这个 \\. 刚才打错了
作者: 绿影 时间: 2011-11-9 11:21
String[] fileNameArray = fileName.split(".");改成String[] fileNameArray = fileName.split("\\.");
作者: 海林 时间: 2011-11-9 11:22
不禁是. 还有 | 也是呢? ?那个发表于3分钟前的 怎么在我之前呢?
作者: 张翼 时间: 2011-11-10 15:59
本帖最后由 张翼 于 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
张翼 发表于 2011-11-10 15:59 
public class acc
{
public static void main(String argv[])
后来我也是用这个方法做出来的
作者: 郭学文 时间: 2011-11-10 16:09
找了下我之前做的- 答://取得点'.'最后一次出现的位置,加上1即为后缀名的开始位,再从此位取此位
- //到结尾的子字符串。
- String str = "kkk.java.txt";
- String suf= str.substring(str.lastIndexOf('.')+1);
- //结果:suf="txt"
复制代码
作者: 胡文杰 时间: 2011-11-10 16:35
可以找到最后一个“.”的位置索引,然后从这个索引开始截取字符到最后不就行了,干嘛非要那么麻烦呢?!
作者: 黑马杨洋 时间: 2012-9-22 00:42
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) 在原有的字符串中生成一个新的字符串以输入的角标下一个开始
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |