使用Reader流进行字符加密

  • 需求
    数字:
    如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
    如果是9的数字,变成0
    字母字符:
    如果是非z字符,向右移动一个,比如d变成e, G变成H
    如果是z,z->a, Z-A
    字符需要保留大小写
    非字母字符
    比如',&^ 保留不变,中文也保留不变
  • 第一次实现思路
    第一次实现使用if对字符进行分类判断,但是由于没有将细节考虑全面,在最后在处理zZ9上面出现问题。有空再来补充为什么对他们的处理会出现问题。
  • 遇到的问题

1.像这种分多类别进行判断的情况使用switch...case...非常方便,在第一次实现的时候脑海中闪过应该使用switch...case...,但没有进行尝试。
2. write方法使用之后一定要调用close方法释放流。

fr2.write(ch2);
fr2.close();
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ReaderTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file1 = new File("C:\\Users\\12082\\Desktop\\MyStringBuffer.txt");
		File file2 = new File("C:\\Users\\12082\\Desktop\\testencode.txt");
		encodeFile(file1,file2);
	}
	public static void encodeFile(File encodingFile, File encodedFile) {
		try {
			FileReader fr1 = new FileReader(encodingFile);
			char ch1[] = new  char[(int)encodingFile.length()];
			char ch2[] =new char[ch1.length];
			fr1.read(ch1);
			System.out.println("加密之前的字符为:");
			for(char a:ch1) {
				System.out.print(a);
			}
			for(int i = 0 ;i<ch1.length;i++) {
				//判断是否是数字
				if(Character.isDigit(ch1[i]) && ((int)ch1[i]) !=9 ){
					ch2[i] = (char) (ch1[i]+1);
				}
				if((int)ch1[i] == 9) {
					ch2[i] = (char) (ch1[i] -'9'-'0') ;
				}
				if((Character.isLetter(ch1[i]) && (ch1[i] !='z') && (ch1[i]) !='Z')) {
					ch2[i] = (char) (ch1[i]+1);
				}
				if( (ch1[i] =='z') && (ch1[i] =='Z')){
					ch2[i] = (char) (ch1[i] -'z'-'Z') ;
				}
				if(!(Character.isDigit(ch1[i])||Character.isLetter(ch1[i]))) {
					ch2[i] = ch1[i];
				}
			}
			FileWriter fr2 = new FileWriter(encodedFile);
			fr2.write(ch2);
			fr2.close();
			System.out.println("加密之后的字符为:");
			for(char a:ch2) {
				System.out.print(a);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  • 第二次实现思路
    使用switch...case...zZ9进行处理,实际还有一个问题,想想看,对中文字符如何处理?这里还有一个特殊情况,下次在进行补充。除中文字符实现的过程如下:
package iotest;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class ReaderTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file1 = new File("C:\\Users\\1026\\Desktop\\encoding.txt");
		File file2 = new File("C:\\Users\\1026\\Desktop\\result.txt");
		encodeFile(file1,file2);
	}
	public static void encodeFile(File encodingFile, File encodedFile) {
		try {
			FileReader fr1 = new FileReader(encodingFile);
			char ch1[] = new  char[(int)encodingFile.length()];
			char ch2[] =new char[ch1.length];
			fr1.read(ch1);
			System.out.println("加密之前的字符为:");
			for(char a:ch1) {
				System.out.print(a);
			}
			for(int i = 0 ;i<ch1.length;i++) {
				//判断是否是数字
				 ch2[i] =ch1[i];
				 if (Character.isLetter(ch2[i]) || Character.isDigit(ch2[i])) {
					switch ( ch2[i]) {
				case '9':
					 ch2[i] = '0';
					break;
				case 'z':
					 ch2[i] = 'a';
					break;
				case 'Z':
					 ch2[i] = 'A';
					break;
				default:
					 ch2[i]++;
					break;
					}
				}
				 if (!Character.isLetter(ch2[i]) && !Character.isDigit(ch2[i])) {
					 ch2[i] =ch2[i];
				 }
			}
			FileWriter fr2 = new FileWriter(encodedFile);
			fr2.write(ch2);
			fr2.close();//一定要加
			System.out.println("\n加密之后的字符为:");
			for(char a:ch2) {
				System.out.print(a);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

这里要推荐一下how2j这个网站,里面有java全栈开发的详细技能,关键是这个网站里配的很多的练习题目,这点很赞!链接如下:https://how2j.cn?p=149636

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章