- 需求
數字:
如果不是9
的數字,在原來的基礎上加1
,比如5
變成6
,3
變成4
如果是9
的數字,變成0
字母字符:
如果是非z
字符,向右移動一個,比如d
變成e
,G
變成H
如果是z,z->a, Z-A
。
字符需要保留大小寫
非字母字符
比如',&^
保留不變,中文也保留不變 - 第一次實現思路:
第一次實現使用if對字符進行分類判斷,但是由於沒有將細節考慮全面,在最後在處理zZ
和9
上面出現問題。有空再來補充爲什麼對他們的處理會出現問題。 - 遇到的問題:
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...
對zZ
和9
進行處理,實際還有一個問題,想想看,對中文字符如何處理?這裏還有一個特殊情況,下次在進行補充。除中文字符實現的過程如下:
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