思考与实践

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();
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值