Java-如何在不使用!@#$%^&*()的情况下从0打印到z?> <“:{} |字母,仅包括字母和数字

时间:2019-04-14 14:06:24

标签: java char

我正在尝试获取仅包含字母和数字的txt文件。 txt文件中还包含非字母字符。

public class WordChanger2 {

    static int input = 2; /// input line length

    public static ArrayList<Character> str; /// a list containing characters.
    public static PrintWriter output; 
    public void saveToFile(int size,int lineSize){    

        if(size == lineSize){
            String s = "";
            for (Character str1 : str) {
                s+=str1;
            }
            output.println(s);
            return;
        }
        for(char i = '0';i<='z';i++){ //from number 0 to lower z
            str.add(i);
            saveToFile(size+1,lineSize);
            str.remove(str.size()-1);
            System.out.println(str); //showing the Characters on console
        }
    }

    public static void main(String[] args) throws FileNotFoundException {
        int lineSize = input;
        output = new PrintWriter("E:\\output.txt");  /// file path
        str = new ArrayList<Character>();

        WordChanger2 c =  new WordChanger2();
        c.saveToFile(0 ,lineSize);
        output.close();
        System.out.println("Done! check the Txt file on your E: drive");
    }
}

试图得到这个:

00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
0G
0H
0I
0J
0K
0L
0M
0N
0O
0P
0Q
0R
0S
0T
0U
0V
0W
0X
0Y
0Z
0a
0b
0c
0d
0e
0f
0g
0h
0i
0j
0k
0l
0m
0n
0o
0p
0q
0r
0s
0t
0u
0v
0w
0x
0y
0z

1 个答案:

答案 0 :(得分:2)

解决方案1:

for循环中使用Character#IsLetterOrDigit(char)方法 这很明确。

for(char i = '0';i<='z';i++){ //from number 0 to lower z
    if (Character.IsLetterOrDigit(i) {
        str.add(i);
        saveToFile(size+1,lineSize);
        str.remove(str.size()-1);
        System.out.println(str); //showing the Characters on console
    }
}

解决方案2:

使用更多循环:

for(char i = '0';i<='9';i++){ //from number 0 to 9
    //do something
}
for(char i = 'A';i<='Z';i++){ //from letter A to Z
    //do something
}
for(char i = 'a';i<='z';i++){ //from letter a to z
    //do something
}

对此可以进行改进,以避免重复很多代码

解决方案3:(Andy Turner的积分)

创建一个包含每个字母和数字的正确顺序的字符串,并在此字符串上循环以构建输出

String table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for (int i=0; i<table.size(); i++) {
    str.add(table.charAt(i));
    ...
}
  

旁注:   我认为使用递归调用来完成您要尝试的操作有点过分。为什么不构建单个字符串,在循环中添加字符,然后在循环结束时将其写在您想要的任何位置?