Skip to content

Instantly share code, notes, and snippets.

@ItsKovan
Created July 19, 2017 20:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ItsKovan/119d10badbd58383b650d238fdcca447 to your computer and use it in GitHub Desktop.
Save ItsKovan/119d10badbd58383b650d238fdcca447 to your computer and use it in GitHub Desktop.
package ru.kovan.converter;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
/**
* @author Kovan
*/
public class Application {
private static final String[] APP_HEADER = new String[]{
"******************************************",
"* CharacterConverter by [Kovan]",
"* VK page: [https://vk.com/itskovan]",
"* Enjoy! ;)",
"******************************************"
};
private static final Map<Character, Character> CHARACTER_MAP = new HashMap<Character, Character>() {
{
//Letters
put('a', 'a');
put('b', 'b');
put('c', 'c');
put('d', 'd');
put('e', 'e');
put('f', 'f');
put('h', 'h');
put('i', 'i');
put('j', 'j');
put('k', 'k');
put('l', 'l');
put('m', 'm');
put('n', 'n');
put('o', 'o');
put('p', 'p');
put('q', 'q');
put('r', 'r');
put('s', 's');
put('t', 't');
put('u', 'u');
put('v', 'v');
put('w', 'w');
put('x', 'x');
put('y', 'y');
put('z', 'z');
put('g', 'g');
//Numbers
put('0', '0');
put('1', '1');
put('2', '2');
put('3', '3');
put('4', '4');
put('5', '5');
put('6', '6');
put('7', '7');
put('8', '8');
put('9', '9');
}
};
private static final String DELIMITER = "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-";
private static File file;
public static void main(String[] args) throws IOException {
for (String s : APP_HEADER) System.out.println(s);
loadFile();
startup();
}
private static void loadFile() throws IOException {
System.out.println("Загрузка файла...");
file = new File("translated.txt");
if (!file.exists()) file.createNewFile();
}
private static String[] getInfo(String translated) {
return new String[]{
DELIMITER,
translated,
DELIMITER
};
}
private static void save(String translated) {
try {
for (String s : getInfo(translated)) {
Files.write(file.toPath(), s.concat("\n").getBytes(Charset.forName("UTF-8")), StandardOpenOption.APPEND);
}
} catch (IOException ex) {
System.out.println("Cannot save dump.");
ex.printStackTrace();
}
}
public static void startup() throws IOException {
String text = translate(readString("Введите текст", (s) -> s));
save(text);
System.out.println("Переведенный текст сохранен в файл translated.txt");
startup();
}
public static String translate(String s) {
StringBuilder builder = new StringBuilder();
int incompatible = 0;
for (char ch : s.toCharArray()) {
boolean upper = Character.isUpperCase(ch);
Character translated = CHARACTER_MAP.get(upper ? Character.toLowerCase(ch) : ch);
if (translated == null) {
translated = ch;
if (ch != ' ') incompatible++;
}
builder.append(upper ? Character.toUpperCase(translated) : translated);
}
System.out.println("Текст успешно переведен! Несовместимых символов найдено: " + incompatible);
return builder.toString();
}
private static <T> T readString(String msg, Function<String, T> function) throws IOException {
System.out.println(msg);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while (((line = reader.readLine())) != null) {
if (line.trim().isEmpty()) continue;
if (function.apply(line) == null) return readString(msg, function);
else return function.apply(line);
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment