java编写一个字符串,长度为三个字符,必须按顺序生成,从aaa到zzz

java编写一个字符串,长度为三个字符,从aaa开始到zzz截止,每次生成该字符串我会储存起来,比如第一次我生成aaa,存到一个文件里,然后第二次我读取到这个字符串,我会生成aab,第三次生成aac,第四次生成aad,第五次生成aae.......,直到zzz截止

import java.io.*;

public class threeString {
public static void main(String[] args) throws Exception {

if (!(new File("D:\\threeString\\").isDirectory())) {
new File("D:\\threeString\\").mkdir();
}
File tofile = new File("D:\\threeString\\temp.txt");
if (!tofile.exists()) {
tofile.createNewFile();
}
String lastLine = readLastLine(tofile, "utf-8").replace("\n", "");
System.out.println(lastLine);
if (lastLine != null && lastLine != "zzz") {
String newLine = "";
if (lastLine == null || lastLine == "") {
newLine = "aaa\n";
} else {
newLine = stringPP(lastLine);//自己实现下
}
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(
"D:\\threeString\\temp.txt"), true));
writer.append(newLine);
writer.flush();
writer.close();
}
}

public static String stringPP(String s) {//字符递增,考虑转成16进制后+1,再转成字符串,转换函数写好了
return s;
}

public static String toHexString(String s) {
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
return str;
}

public static String toStringHex(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(
s.substring(i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
s = new String(baKeyword, "utf-8");// UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return s;
}

public static String readLastLine(File file, String charset)
throws IOException {
if (!file.exists() || file.isDirectory() || !file.canRead()) {
return null;
}
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(file, "r");
long len = raf.length();
if (len == 0L) {
return "";
} else {
long pos = len - 1;
while (pos > 0) {
pos--;
raf.seek(pos);
if (raf.readByte() == '\n') {
break;
}
}
if (pos == 0) {
raf.seek(0);
}
byte[] bytes = new byte[(int) (len - pos)];
raf.read(bytes);
if (charset == null) {
return new String(bytes);
} else {
return new String(bytes, charset);
}
}
} catch (FileNotFoundException e) {
} finally {
if (raf != null) {
try {
raf.close();
} catch (Exception e2) {
}
}
}
return null;
}
}

追答

给你个完整的,替换原来的stringPP函数,删掉toStringHex和toHexString函数

public static String stringPP(String s) {
char[] ss=s.toCharArray();
int a=(int)ss[0]-97;
int b=(int)ss[1]-97;
int c=(int)ss[2]-97;
int sum=a*26*26+b*26+c;
int newSum=sum+1;
int newa=newSum/(26*26);
int newb=(newSum-newa*26*26)/26;
int newc=newSum-newa*26*26-newb*26;

ss[0]=(char)(newa+97);
ss[1]=(char)(newb+97);
ss[2]=(char)(newc+97);
return "\n"+String.valueOf(ss);
}

 

上面是执行结果

追问

你好,谢谢你的解答,不过我在调试的时候遇到一个问题就是aad口口口,后面带了小框,估计是乱码,然后我想文件中保留上一次的字符就行了,不用所有都保留,麻烦再帮忙看下怎么解决,谢谢!

追答

这个好整

修改22行和stringPP中15行,14行也要修改下,分别为


BufferedWriter writer = new BufferedWriter(new FileWriter(new File(
"D:\\threeString\\temp.txt"), false));
return String.valueOf(ss);
if (lastLine != null && !lastLine.equals("zzz")){

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-02
public static void main(String[] args) {
String a1 = "aaa";
char[] chars = a1.toCharArray();
while(true){
System.out.println(new String(chars));
if(getSeq(chars)==null){
break;
}
}

}

public static char[] getSeq(char[] chars){
if(chars[2]!='z'){
chars[2]=(char)((int)chars[2]+1);
}else {
chars[2]='a';
if(chars[1]!='z'){
chars[1]=(char)((int)chars[1]+1);
}else {
if(chars[0]!='z'){
chars[0]=(char)((int)chars[0]+1);
}else {
return null;
}
}
}
return chars;
}本回答被网友采纳

java编写一个字符串,长度为三个字符,必须按顺序生成,从aaa到zzz
import java.io.*;public class threeString {public static void main(String[] args) throws Exception {if (!(new File("D:\\\\threeString\\\\").isDirectory())) {new File("D:\\\\threeString\\\\").mkdir();}File tofile = new File("D:\\\\threeString\\\\temp.txt");if (!tofile.exist...

用Java写一个程序:使其输出从A-Z的排序字母
public static void main(String[] args) { int count;Scanner scan = new Scanner(System.in);count = scan.nextInt();\/\/ max[0]: 记录只有1位(A ... Z)时,count的最大值。\/\/ max[1]:记录只有2位(AA ... ZZ)时,count的最大值。\/\/ max[2]: 记录只有3位(AAA, AAB, ...,...

用java如何将一个字符串string=“aaabbbcccdddd”,输出为:aaa,bbb,c...
String[] str1 = {"aaa","bbb","ccc"};String[] str2 = {"bbb","ddd"};String[] str3 = {"eee","fff"};\/\/运算开始:Map<String,String> isH = new HashMap<String,String>();for(String s:str1){ if(isH.get(s)==""){continue;} isH.put(s,"");} for(String s:str...

JAVA字符串操作,编写一个方法,要求输入bbbcccddd 输出 aaaeeezzz
public static void reT() { String initStr = "bbbcccddd";initStr = (initStr.indexOf("b") != -1) ? initStr.replaceAll("b", "a") : initStr;initStr = (initStr.indexOf("c") != -1) ? initStr.replaceAll("c", "e") : initStr;initStr = (initStr.indexOf("d")...

java输入一个字符串,要求将该字符串中出现的英文字母,按照顺序 进行输出...
\/\/ 取出大写字母,拼成字符串 StringBuilder result = new StringBuilder();for (int i = 0; i < upperCaseArr.length; i++) { result.append(upperCaseArr[i]);} \/\/ 定义接收剩余字母 StringBuilder remainingStr = new StringBuilder();for (int i = 0; i < lowerCaseArr.length; i++)...

怎么用java编程将字符串aaaabbbccdde编程得到结果为: aaaa bbb cc d...
public static void main(String[] args) { String s="aaaabbbccdde";char tmp=s.charAt(0);String n="";for(int i=0;i

java 输入一个字符串,打印这个字符串,当输入bye,程序结束。当输入next...
import java.util.Scanner;public class Test { public static void main(String[] args) { \/\/接受从屏幕输入的字符 Scanner s = new Scanner(System.in);String str = "";while(true){ \/\/永远不停的读取,以回车换行结束 str = s.nextLine();if("bye".equals(str)){\/\/这么写可以防止空...

java中如何创建字符串数组?
java中定义一个字符串数组方式如下:1.String[] str={"AAA","BBB","CCC"};2.String str[]={"AAA","BBB","CCC"};string类型和其他基本类型相似,创建数组时,有上述两种方式。数组可以分为一维数组和二维数组;一维数组的语法格式:数组元素类型 数组名[ ]={数组元素的初值,。。。} 如: ...

如何用java生成有规律的字符串?
static void create(char[] word,String[] num,BufferedWriter bw,int i)throws Exception{ if(i==3){ for(int k=0;k<num.length;k++)bw.write(""+c[0]+c[1]+c[2]+num[k]+" ");bw.write("\\r\\n");return;} for(int j=0;j<word.length;j++){ if(b[j]==true)continue;...

在java中如何定义一个字符串数组
1. java中定义一个字符串数组方式如下,string类型和其他基本类型相似,创建数组有两种方式 :String[] str={"AAA","BBB","CCC"};String str[]={"AAA","BBB","CCC"};2.推荐用ArrayList<String> strArray = new ArrayList<String> (); 比较灵活。3.也可以写为如下格式:class[] array; ...

相似回答