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

  才开始学习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!

        


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

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();
				}
		}
		
		
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值