java避免split越界_java中使⽤split⽅法,发现数组越界
才开始学习java,⼀直对其中的类库含混不清。听前辈们说⼀定要多看java-doc 可是还是有些懒,没有好好研读,所以就出问题了。 这次是⽂件操作⽅⾯: 判断⽂件类的类型,我想应该就是把⽂件名这个字符串处理⼀下,以“.”为分隔符分成两段,把后⾯的字符串输
才开始学习java,⼀直对其中的类库含混不清。听前辈们说⼀定要多看java-doc 可是还是有些懒,没有好好研读,所以就出问题了。
这次是⽂件操作⽅⾯:
判断⽂件类的类型,我想应该就是把⽂件名这个字符串处理⼀下,以“.”为分隔符分成两段,把后⾯的字符串输出即可。
了下String 类⾥⾯的⽅法,果不其然发现了split()
————————————————搬运⼯————————————————
split
public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。java中split的用法
该⽅法的作⽤就像是使⽤给定的表达式和限制参数 0 来调⽤两参数 split ⽅法。因此,所得数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 使⽤这些表达式可⽣成以下结果:
Regex
结果
:
{ "boo", "and", "foo" }
o
{ "b", "", ":and:f" }参数:regex - 定界正则表达式返回:字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的抛出:PatternSyntaxException - 如果正则表达式的语法⽆效
—————————————————————————————————来⾃ JDK API 1.6
看完后,还没弄懂什么是 “正则表达式”,就开始敲代码。
想法是:定义⼀个数组对象来保存结果,然后调⽤⽅法,输出第⼆个字符串即可(前提是输⼊标准,如“”)
可是之后居然显⽰:数组越界。简直不能忍!调试了⼀下,发现返回数组长度居然是0!
以下截取了⼀部分错误代码:
String sfile;
String[]resolve= new String[20];
resolve = sfile.split(".");
output3.setText("⽂件类型"+ resolve[0]);
后来去查了查正则表达式,原来 “.” 在其中是由特殊意义的,所以其实在例⼦“”中并没有分成{“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;
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 = Text();
File f1 = new File("D:\\",sfile);// 在D盘新建⽂件
try {
} 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();
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。