算法练习题1

来源:互联网 发布:专业报复淘宝卖家 编辑:程序博客网 时间:2024/06/15 06:20

 1.  将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt中,a.txt中的单词用回车符分割,b.txt中的文件用回车或者空格进行分隔

import java.io.File;import java.io.FileReader;import java.io.FileWriter;public class MainClass {public static void main(String[] args) throws Exception {//引入a.txtFileManager aText = new FileManager("D:/a.txt", new char[]{'\n'});//引入b.txtFileManager bText = new FileManager("D:/b.txt", new char[]{'\n',' '});//输出流FileWriter cText = new FileWriter("D:/c.txt");String aWord = null;String bWord = null;while((aWord = aText.nextWord()) != null){//先读a.txt中的单词cText.write(aWord + "\n");bWord = bText.nextWord();//再读B中的单词if(bWord != null){cText.write(bWord + "/n");}}//可能B中的单词更多,继续遍历while((bWord = bText.nextWord()) != null){cText.write(bWord + "/n");}}}class FileManager{String[] words = null;//存放文件中的单词int pos = 0;//???public FileManager(String fileName,char[] seperators) throws Exception{//引入文件对象File f = new File(fileName);FileReader reader = new FileReader(f);char[] buf = new char[(int) f.length()];//这里的长度包括空格和回车符吗,回车符也算是一个char吗int len = reader.read(buf);//往buf里面写字符,返回写入字符的indexString results = new String(buf,0,len);String regex = null;//判断分隔符是否是两个?有什么不同?if(seperators.length > 1){regex = "" + seperators[0] + "|" + seperators[1];}else{regex = "" + seperators[0];}words = results.split(regex);//去除文件中的分隔符,将各个单词放入到String数组中}public String nextWord(){if(pos == words.length){return null;}return words[pos++];}}

2.将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class Jad2Java {public static void main(String[] args) throws IOException {//1.1得到目录File srcDir = new File("D:/java");//判断srcDir是否存在并且是否是一个目录if(!(srcDir.exists() && srcDir.isDirectory())){//不存在throw new RuntimeException("目录不存在");}//1.2得到目录下所有的Java文件集合File[] files = srcDir.listFiles(new FilenameFilter() {//1.3只想得到.java文件@Overridepublic boolean accept(File dir, String name) {return name.endsWith(".java");}});//返回目录下的所有文件System.out.println(files.length);//2.1创建目标路径,不存在则创建之File destDir = new File("D:/jad");if(!destDir.exists())destDir.mkdir();//创建目录for (File file : files) {FileInputStream fis = new FileInputStream(file);String destFileName = file.getName().replaceAll("\\.java$", ".jad");FileOutputStream fos =new FileOutputStream(new File(destDir,destFileName));copy(fis,fos);fis.close();fos.close();}}private static void copy(InputStream ips, OutputStream ops) throws IOException{int len = 0;byte[] buf = new byte[1024];while((len = ips.read(buf)) != -1){ops.write(buf, 0, len);//这里的效率很低吧,重复写了很多次}}}

3.编写一个截取字符串的函数,输入为字符串和字节数,输出为按字节截取的字符串,要保证汉字不被截取半个,如“他ABC”,4,应该截取“我AB”,

   输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”

public class Test2 {public static void main(String[] args) throws UnsupportedEncodingException {String str = "我a爱中华dfg我爱北京iou";String str1 = "我ABC汉";int num = trimGBK(str.getBytes("GBK"),5);System.out.println(str.substring(0, num));}private static int trimGBK(byte[] buf, int n) {int num = 0;boolean bChineseFirstHalf = false;for(int i = 0;i < n; i++){if(buf[i] < 0 && !bChineseFirstHalf){bChineseFirstHalf = true;}else{num++;bChineseFirstHalf = false;}}return num;}}

4.有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数

import java.util.HashMap;public class Test2 {public static void main(String[] args) {String content = "中国aadf的111是ddd非的是255分手";countDifNumber(content);}private static void countDifNumber(String content) {int englishCount = 0;int chineseCount = 0;int digitCount = 0;for(int i = 0; i < content.length(); i++){char c = content.charAt(i);if(c >= '0' && c < '9'){digitCount++;}else if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){englishCount++;}else{chineseCount++;}}System.out.println("中文字符有:" + chineseCount + " 个");System.out.println("英文字符有:" + englishCount + " 个");System.out.println("数字有:" + digitCount + " 个");}}

5.将阿拉伯数字的金额转换成中国传统的形式如:(¥1011)转换成(一千零一拾一元整)输出

public class RMB {private static final char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};private static final char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};public static void main(String[] args) {System.out.println(convert(1101));}private static String convert(int money) {//拼接字符串StringBuffer sbf = new StringBuffer();int unit = 0;while(money != 0){sbf.insert(0, units[unit++]);int number = money % 10;sbf.insert(0, data[number]);money /= 10;}sbf.append("整");return sbf.toString();}}
6.将数组中的元素颠倒

 

import java.util.Arrays;public class SwapArray {public static void main(String[] args) {int[] a = new int[]{(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),(int) (Math.random()*1000),};System.out.println(Arrays.toString(a));swap(a);System.out.println(Arrays.toString(a));}private static void swap(int[] a) {int len = a.length;for(int i = 0; i < len/2; i++){int tmp = a[i];a[i] = a[len-1-i];a[len-1-i] = tmp;}}}





0 0
原创粉丝点击