`

思考与实践

F# 
阅读更多
1.编写一个程序,将一个目录及子录下的所有txt类型的文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1Mbytes时,剩下的内容存储到第二个新的文件中,依次往下,新产生的文本文件名依次为1.txt、2.txt...。
package cn.com.io;

import java.io.File;
import java.io.RandomAccessFile;

public class TxtFileTest {
    private static int buf= 1024*1024-1;
    private StringBuilder conten = new StringBuilder();
	public static void main(String[] args) {
	  File file = new File("China");
	  TxtFileTest t = new TxtFileTest();
	  t.getText(file);
	  String str = new String(t.conten);
	  try {
		int i=0;
		int count=1;
		String strnew ="";
		int len = str.length(); 
		RandomAccessFile ra = null;
		while(i<len){
			if(i==0){
			   ra = new RandomAccessFile(count+".txt", "rw");
			}else if(strnew.getBytes().length> buf){
				ra.writeUTF(strnew);
				System.out.println(strnew);
				strnew ="";				
				count++;
				ra = new RandomAccessFile(count+".txt", "rw");
			}
			 strnew +=str.charAt(i);
			 i++;
			 if(i==len){
				 System.out.println(strnew);
				 ra.writeUTF(strnew);
			 }
		  }
		System.out.println("write OK!");
	} catch (Exception e) {
		e.printStackTrace();
	}
	}
	
	public void getText(File f){
		File file[] = f.listFiles();
		for(File dir : file){  
			if(dir.isDirectory()){
				getText(dir);
			}else{
				if(dir.getName().contains(".txt")){
					try {
						RandomAccessFile raf = new RandomAccessFile(dir, "r");
						String strLine = null;
						while((strLine=raf.readLine())!=null){
							conten.append(new String(strLine.getBytes("ISO-8859-1"),"utf8")+"\n");
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
			
		}
	 }
}

2.叙述什么是流,什么是节点流,什么是包装类
流是字节序列的抽象概念,文件是数据的静态存储形式,而流是指数据传输时的形态
流类分为两个大类:节点流类和过滤流类(也叫处理流类)
节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的
包装类:通过完成某个特殊功能的类,称为包装类或者称为过滤流类

3.编写一个函数,把StringRead输入流中所有英文变成大写字母,并将结果写入到一个StringWriter输出流对象中。然后,用这个函数将一个字符串中的所有字符转换成大写。
package cn.com.io;

import java.io.StringReader;
import java.io.StringWriter;


public class StringReadTest {

	public static void main(String[] args) throws Exception {
		String str = "Welcome to China!";
		StringReader sr = new StringReader(str);
		char buf[] = new char[1024];
		sr.read(buf, 0, str.length());
		StringWriter sw = new StringWriter();
		sw.write(new String(buf).toUpperCase());
		System.out.println(sw.toString());
		sw.close();
		sr.close();
	}

}

4.字符编码问题:
package cn.com.io;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class InputReader {

	public static void main(String[] args) throws Exception {
      InputStreamReader isr = new InputStreamReader(System.in);
      BufferedReader br = new BufferedReader(isr);
      String strLine = br.readLine();
      for(int i=0;i<strLine.length();i++){
    	  System.out.println(Integer.toHexString((int)strLine.charAt(i)));
      }
      isr.close();
      System.out.println(new String(new String(strLine.getBytes("gbk"),"utf8")));
	}

}

5.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。
package cn.com;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String[] strs = {"130681198712092019", "13068119871209201x",
				"13068119871209201", "123456789012345", "12345678901234x",
				"1234567890123"};
		Pattern p1 = Pattern.compile("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])");
		for (int i = 0; i < strs.length; i++) {
			Matcher matcher = p1.matcher(strs[i]);
			System.out.println(strs[i] + ":" + matcher.matches());
//			System.out.println(strs[i] + ":" +Pattern.matches("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])",strs[i]));
			if(!matcher.matches()){
				strs[i] = "";
			}
		}
		Pattern p2 = Pattern.compile("\\d{6}(\\d{8}).*"); // 用于提取出生日字符串7位到第12位为身份证为日期类型
		Pattern p3 = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");// 用于将生日字符串进行分
		
		for (int i = 0; i < strs.length; i++) {
			Matcher matcher = p2.matcher(strs[i]);
			boolean b = matcher.find();
			if (b) {
				String s = matcher.group(1); //()用作分组
				Matcher matcher2 = p3.matcher(s);
				if (matcher2.find()) {
					System.out
							.println("生日为" + matcher2.group(1) + "年"
									+ matcher2.group(2) + "月"
									+ matcher2.group(3) + "日");
				}
			}
		}
	}
}

6.图片附件匹配,正则捕获页面地址
package cn.com;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
		String path = ".*src=((.+)\\.([a-z]+))*.";
		String str="图片<img src=\"http://127.0.0.1/tun2/a.jpg\"/> <a href=\"155225\"/>lllll</a><img src=\"http://127.0.0.1/tun2/b.gif\"/>";
		Pattern p1 =Pattern.compile(path);
		Matcher matcher =p1.matcher(str);
		boolean b = matcher.find(); 
        while(b){
        	System.out.println(matcher.group(1).replaceAll("(')|(\")",""));
        	str=str.replaceAll("src="+matcher.group(1), "");
        	matcher =p1.matcher(str);
        	b = matcher.find(); 
        }
	  }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics