java避免split越界_java中使用split方法,发现数组越界

才开始学习java,一直对其中的类库含混不清。听前辈们说一定要多看java-doc 可是还是有些懒,没有好好研读,所以就出问题了。 这次是文件操作方面: 判断文件类的类型,我想应该就是把文件名这个字符串处理一下,以“.”为分隔符分成两段,把后面的字符串输

才开始学习java,一直对其中的类库含混不清。听前辈们说一定要多看java-doc 可是还是有些懒,没有好好研读,所以就出问题了。

这次是文件操作方面:

判断文件类的类型,我想应该就是把文件名这个字符串处理一下,以“.”为分隔符分成两段,把后面的字符串输出即可。

找了下String 类里面的方法,果不其然发现了split()

————————————————搬运工————————————————

split

public String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex

结果

:

{ "boo", "and", "foo" }

o

{ "b", "", ":and:f" }参数:regex - 定界正则表达式返回:字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的抛出:PatternSyntaxException - 如果正则表达式的语法无效

—————————————————————————————————来自 JDK API 1.6

看完后,还没弄懂什么是 “正则表达式”,就开始敲代码。

想法是:定义一个数组对象来保存结果,然后调用方法,输出第二个字符串即可(前提是输入标准,如“test.txt”)

可是之后居然显示:数组越界。简直不能忍!调试了一下,发现返回数组长度居然是0!

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140602134914328%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvR2F2ZWNoYW4%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Fgavechan%2Farticle%2Fdetails%2F28102819

以下截取了一部分错误代码:

String sfile;

String[]resolve= new String[20];

resolve = sfile.split(".");

output3.setText("文件类型"+ resolve[0]);

后来去查了查正则表达式,原来 “.” 在其中是由特殊意义的,所以其实在例子“test.txt”中并没有分成{“test”,“txt”}。     如果要使用需要:

把“.” 改成 “\\.”就OK啦!

具体为什么其实我也不是很清楚,但是作为个初学者,先记下来吧。

附上 正则表达式的百度词条:什么是正则表达式?

好了,以下是我所有代码:(如果你是老手就请无视吧。)

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.io.File;

import java.io.IOException;

import java.sql.Date;

import java.text.SimpleDateFormat;

public class FileDetail extends Applet implements ActionListener

{

Label prompt;

TextField input,output1,output2,output3;

String[] resolve = new String[20];

String sfile;

public void init()

{

prompt = new Label("请输入文件名: ");

input = new TextField(10);

output1 = new TextField(28);

output2 = new TextField(20);

output3 = new TextField(20);

add (prompt);

add (input);

add (output1);//其实是最后一次修改时间,而非创建时间

add (output2);//文件长度

add (output3);//文件类型,这是这一次的关键

input.addActionListener(this);

}

public void actionPerformed(ActionEvent e)

{

sfile = input.getText();

File f1 = new File("D:\\",sfile);// 在D盘新建文件

try {

f1.createNewFile();

} catch (IOException e2) {

// TODO Auto-generated catch block

e2.printStackTrace();

}

long time = f1.lastModified();

String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(time));

output1.setText("创建时间 "+ctime);

output2.setText("文件长度 "+f1.length() );

resolve = sfile.split("\\.");

System.out.println( resolve.length);

try {

output3.setText("文件类型 "+ resolve[1].toString());

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值