Java — Как печатать от 0 до z без !@#$%^

#java #char

#java #символ

Вопрос:

Я пытаюсь получить текстовый файл, в котором записаны только алфавит и цифры. В текстовом файле также есть не алфавитные символы.

 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
0

в 0 Вт 0x
0y
0z

Комментарии:

1. цикл от 0 до 9 , затем от A до Z , затем от a до z ? Я не вижу здесь проблемы

Ответ №1:

Решение 1:

Используйте Character#IsLetterOrDigit(char) метод в for цикле, он довольно явный.

 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: (кредиты для Энди Тернера)

Создайте строку, содержащую все буквы и цифры в правильном порядке, и выполните цикл по этой строке для построения вывода

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

Примечание сбоку:
Я думаю, что использование рекурсивного вызова для выполнения того, что вы пытаетесь, немного излишне. Почему бы не создать единую строку, добавляя символы в цикле, а когда цикл заканчивается, записать его куда угодно?

Комментарии:

1. О, хорошо, спасибо тебе!

2. Другое решение с одним циклом: создайте строку "0123456789ABCD...Zabcd...z" и выполняйте итерацию посимвольно.