#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"
и выполняйте итерацию посимвольно.