Итак, я видел, как Unicode используется для создания большого страшного искажения символов из обычного текста ввода, более известного как текст Zalgo. HTML (редактирование: javascript), похоже, делает wonderful job. Поэтому мне было интересно, может ли такое же (или что-то подобное) сделать на Java? Я относительно новичок в этом, поэтому считаю, что создание подобного генератора будет хорошим упражнением.Текст Zalgo на Java?
4
A
ответ
2
EDIT, чтобы показать, как это сделать в java.
Результат сохраняется в текстовом файле zalgo.txt в формате Unicode. Мы сохраняем его в файле, потому что ваша IDE может не знать, как правильно отображать символы Юникода, если вы пишете его в выходной поток.
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
public class Zalgo {
private static final char[] zalgo_up =
{ '\u030d', /* Ì? */'\u030e', /* ÌŽ */'\u0304', /* Ì„ */'\u0305', /* Ì… */
'\u033f', /* Ì¿ */'\u0311', /* Ì‘ */'\u0306', /* ̆ */'\u0310', /* Ì? */
'\u0352', /* ͒ */'\u0357', /* ͗ */'\u0351', /* ͑ */'\u0307', /* ̇ */
'\u0308', /* ̈ */'\u030a', /* ̊ */'\u0342', /* ͂ */'\u0343', /* ̓ */
'\u0344', /* ̈Ì? */'\u034a', /* ÍŠ */'\u034b', /* Í‹ */'\u034c', /* ÍŒ */
'\u0303', /* ̃ */'\u0302', /* Ì‚ */'\u030c', /* ÌŒ */'\u0350', /* Í? */
'\u0300', /* Ì€ */'\u0301', /* Ì? */'\u030b', /* Ì‹ */'\u030f', /* Ì? */
'\u0312', /* ̒ */'\u0313', /* ̓ */'\u0314', /* ̔ */'\u033d', /* ̽ */
'\u0309', /* ̉ */'\u0363', /* ͣ */'\u0364', /* ͤ */'\u0365', /* ͥ */
'\u0366', /* ͦ */'\u0367', /* ͧ */'\u0368', /* ͨ */'\u0369', /* ͩ */
'\u036a', /* ͪ */'\u036b', /* Í« */'\u036c', /* ͬ */'\u036d', /* Í */
'\u036e', /* ͮ */'\u036f', /* ͯ */'\u033e', /* ̾ */'\u035b', /* ͛ */
'\u0346', /* ͆ */'\u031a' /* ̚ */
} ;
private static final char[] zalgo_down =
{ '\u0316', /* ̖ */'\u0317', /* ̗ */'\u0318', /* ̘ */'\u0319', /* ̙ */
'\u031c', /* Ìœ */'\u031d', /* Ì? */'\u031e', /* Ìž */'\u031f', /* ÌŸ */
'\u0320', /* Ì */'\u0324', /* ̤ */'\u0325', /* Ì¥ */'\u0326', /* ̦ */
'\u0329', /* ̩ */'\u032a', /* ̪ */'\u032b', /* ̫ */'\u032c', /* ̬ */
'\u032d', /* Ì */'\u032e', /* Ì® */'\u032f', /* ̯ */'\u0330', /* Ì° */
'\u0331', /* ̱ */'\u0332', /* ̲ */'\u0333', /* ̳ */'\u0339', /* ̹ */
'\u033a', /* ̺ */'\u033b', /* ̻ */'\u033c', /* ̼ */'\u0345', /* ͅ */
'\u0347', /* ͇ */'\u0348', /* ͈ */'\u0349', /* ͉ */'\u034d', /* Í? */
'\u034e', /* ÍŽ */'\u0353', /* Í“ */'\u0354', /* Í” */'\u0355', /* Í• */
'\u0356', /* ͖ */'\u0359', /* ͙ */'\u035a', /* ͚ */'\u0323' /* ̣ */
} ;
//those always stay in the middle
private static final char[] zalgo_mid =
{ '\u0315', /* Ì• */'\u031b', /* Ì› */'\u0340', /* Ì€ */'\u0341', /* Ì? */
'\u0358', /* ͘ */'\u0321', /* ̡ */'\u0322', /* ̢ */'\u0327', /* ̧ */
'\u0328', /* ̨ */'\u0334', /* ̴ */'\u0335', /* ̵ */'\u0336', /* ̶ */
'\u034f', /* Í? */'\u035c', /* Íœ */'\u035d', /* Í? */'\u035e', /* Íž */
'\u035f', /* ÍŸ */'\u0360', /* Í */'\u0362', /* Í¢ */'\u0338', /* ̸ */
'\u0337', /* Ì· */'\u0361', /* Í¡ */'\u0489' /* Ò‰_ */
} ;
// rand funcs
//---------------------------------------------------
//gets an int between 0 and max
private static int rand(int max) {
return (int)Math.floor(Math.random() * max);
}
//gets a random char from a zalgo char table
private static char rand_zalgo(char[] array) {
int ind = (int)Math.floor(Math.random() * array.length);
return array[ind];
}
//hide show element
//lookup char to know if its a zalgo char or not
private static boolean is_zalgo_char(char c) {
for (int i = 0; i < zalgo_up.length; i++)
if (c == zalgo_up[i])
return true;
for (int i = 0; i < zalgo_down.length; i++)
if (c == zalgo_down[i])
return true;
for (int i = 0; i < zalgo_mid.length; i++)
if (c == zalgo_mid[i])
return true;
return false;
}
public static String goZalgo(String iText, boolean zalgo_opt_mini, boolean zalgo_opt_normal, boolean up,
boolean down, boolean mid) {
String zalgoTxt = "";
for (int i = 0; i < iText.length(); i++) {
if (is_zalgo_char(iText.charAt(i)))
continue;
int num_up;
int num_mid;
int num_down;
//add the normal character
zalgoTxt += iText.charAt(i);
//options
if (zalgo_opt_mini) {
num_up = rand(8);
num_mid = rand(2);
num_down = rand(8);
} else if (zalgo_opt_normal) {
num_up = rand(16)/2 + 1;
num_mid = rand(6)/2;
num_down = rand(16)/2 + 1;
} else //maxi
{
num_up = rand(64)/4 + 3;
num_mid = rand(16)/4 + 1;
num_down = rand(64)/4 + 3;
}
if (up)
for (int j = 0; j < num_up; j++)
zalgoTxt += rand_zalgo(zalgo_up);
if (mid)
for (int j = 0; j < num_mid; j++)
zalgoTxt += rand_zalgo(zalgo_mid);
if (down)
for (int j = 0; j < num_down; j++)
zalgoTxt += rand_zalgo(zalgo_down);
}
return zalgoTxt;
}
public static void main(String[] args){
final String zalgoTxt = goZalgo("To invoke the hive-mind representing chaos.\n" +
"Invoking the feeling of chaos.\n" +
"With out order.\n" +
"The Nezperdian hive-mind of chaos. Zalgo. \n" +
"He who Waits Behind The Wall.\n" +
"ZALGO!", true, false, true, true, true);
try {
final File fileDir = new File("zalgo.txt");
final Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileDir), "UTF8"));
final String[] lines = zalgoTxt.split("\n");
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
out.append(line).append("\r\n");;
}
out.flush();
out.close();
} catch (UnsupportedEncodingException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Если вы внимательно посмотрите здесь (другой zalgo генератор):
http://textozor.com/zalgo-text/
Вы можете видеть, что он использует JavaScript для создания перепутались код: http://textozor.com/zalgo-text/scriptz.js
Преобразовать эту логику в любой язык, который вы хотите.
Смежные вопросы
- 1. Как предотвратить текст zalgo с помощью php
- 2. Как визуализировать текст Zalgo в C#
- 3. Преобразование Zalgo текста в обычный текст
- 4. Как защититься от диакритиков, таких как Zalgo текст
- 5. Java - напишите текст на экране
- 6. Текст на Java UTF-8?
- 7. Java разделяет текст на предложения на основе «...», «.», «?», «!»,
- 8. Простой Java-текст на основе игры
- 9. docx Template Docx4j, заменяющий текст на Java
- 10. Как форматировать текст из файла на Java?
- 11. Java - Разделите текст на куски n-байтов
- 12. Напишите текст на изображение в Java
- 13. как стилизовать текст на стороне Java андроида?
- 14. Как скрыть текст на JButton в java?
- 15. Java: применять геометрический преобразованный текст на изображении
- 16. Как изменить текст выделенного текста на Java?
- 17. Java PHP отправить текст Файл на сервер
- 18. Как получить текст кнопки на Java?
- 19. Java Applet, не очищающий текст на экране
- 20. Текст не отображается на Jtogglebutton в java
- 21. Как разобрать текст в списках на Java?
- 22. Разделить данный текст на основе шаблона Java
- 23. Java SWT - текст на прозрачной оболочке?
- 24. Как написать текст на изображении в Java?
- 25. Java отсутствует текст кнопки
- 26. Локализованный текст в Java
- 27. Java: Интеллектуальный текст расщепления
- 28. Добавить текст Java RequestDispatcher
- 29. Двоичный текст в Java
- 30. Java docx4j Жирный текст
Я вижу логику, но я не знаю, как манипулировать символами Unicode аналогичным образом в Java. – Strainborm
@Strainborm Я отредактировал свой ответ, чтобы показать вам, как это сделать. – MihaiC
о, ничего себе! не думал бы, что вы пойдете вперед и преобразуете весь код ... но большое вам спасибо, это определенно помогает кучу :) – Strainborm