lots of exercises in java... from https://github.com/exercism/java

Markdown.java 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. class Markdown {
  2. String parse(String markdown)
  3. {
  4. String[] lines = markdown.split("\n");
  5. StringBuilder result = new StringBuilder();
  6. boolean activeList = false;
  7. for (int i = 0; i < lines.length; i++)
  8. {
  9. String lineResult = parseLine(lines[i]);
  10. if(lineResult.matches(".*(<li>).*") && !activeList){
  11. activeList = true;
  12. result.append("<ul>");
  13. result.append(lineResult);
  14. }
  15. else if(!lineResult.matches(".*(<li>).*") && activeList){
  16. activeList = false;
  17. result.append("</ul>");
  18. result.append(lineResult);
  19. }
  20. else {
  21. result.append(lineResult);
  22. }
  23. }
  24. if(activeList){
  25. result.append("</ul>");
  26. }
  27. return result.toString();
  28. }
  29. private String parseLine(String markdown)
  30. {
  31. String result = parseHeader(markdown);
  32. if (result == null)
  33. {
  34. result = parseListItem(markdown);
  35. }
  36. if (result == null)
  37. {
  38. result = parseParagraph(markdown);
  39. }
  40. return result;
  41. }
  42. private String parseHeader(String markdown)
  43. {
  44. int count = 0;
  45. for (int i = 0; i < markdown.length(); i++)
  46. {
  47. if (markdown.charAt(i) == '#')
  48. {
  49. count++;
  50. }
  51. else
  52. {
  53. break;
  54. }
  55. }
  56. if (count == 0)
  57. {
  58. return null;
  59. }
  60. return wrap(markdown.substring(count + 1), "h" + Integer.toString(count));
  61. }
  62. private String parseListItem(String markdown)
  63. {
  64. if (markdown.startsWith("*"))
  65. {
  66. return wrap(parseText(markdown.substring(2)), "li");
  67. }
  68. return null;
  69. }
  70. private String parseParagraph(String markdown)
  71. {
  72. return wrap(parseText(markdown), "p");
  73. }
  74. private String parseText(String markdown)
  75. {
  76. return parse_(parse__(markdown));
  77. }
  78. private String parse_(String markdown)
  79. {
  80. return parseViaRegex(markdown, "_", "em");
  81. }
  82. private String parse__(String markdown)
  83. {
  84. return parseViaRegex(markdown, "__", "strong");
  85. }
  86. private String parseViaRegex(String markdown, String delimiter, String tag)
  87. {
  88. String pattern = delimiter + "(.+)" + delimiter;
  89. String replacement = "<" + tag + ">$1</" + tag + ">";
  90. return markdown.replaceAll(pattern, replacement);
  91. }
  92. private String wrap(String text, String tag){
  93. return "<" + tag + ">" + text + "</" + tag + ">";
  94. }
  95. }