CCF-Markdown Java
阿新 • • 發佈:2018-12-16
提供一個思路,但是不是滿分
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Markdown { static Scanner sc; static List<String> list; static List<String> input; static String line; static int check; static int precheck; public static void main(String[] args) { sc = new Scanner(System.in); list = new ArrayList<>(); input = new ArrayList<>(); while (sc.hasNextLine()) { line = sc.nextLine(); input.add(line); } deal(); for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); } } public static void deal() { String str = ""; for (int i = 0; i < input.size(); i++) { // 需要對段落進行處理 if (input.get(i).length() != 0 && !input.get(i).contains("#") && !input.get(i).contains("*")) { if((i+1)<input.size()) { while ((i+1)<input.size()&&input.get(i + 1).length() != 0) { str += input.get(i)+"\n"; i++; } } str += input.get(i); } else if (input.get(i).length() != 0) { str = input.get(i); } else str = ""; if (str.length() != 0) { switch (str.charAt(0)) { case '#': // 表示碰到了標題 if (check != 0) { list.add("</ul>"); } check = 0; title(str); break; case '*': // 表示碰到了無序列表 check++; if (check == 1) { list.add("<ul>"); } noorderlist(str); break; default: if (check != 0) { list.add("</ul>"); } check = 0; pragh(str); // 表示碰到了段落 break; } } } //表示如果最後一行是無序列表的話 應該加上</ul> if(input.get(input.size()-1).contains("*")) { list.add("</ul>"); } } // 標題的處理 public static void title(String line) { int count = 0; int index = 0; for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == '#') { // 計算出這一行包含了多少個# count++; index = i;// 記錄#到什麼時候結束 } else { break; } } line = line.substring(index + 2); line = "<h" + (count) + ">" + line + "</h" + (count) + ">"; list.add(line); } // 無序列表的處理 public static void noorderlist(String line) { line = line.substring(2); line = "<li>" + line + "</li>"; list.add(line); } // 段落的處理 段落中包含了兩種格式 public static void pragh(String line) { // 表示如果裡面包含了強調 while (line.contains("_")) { int index1 = line.indexOf("_"); int index2 = line.lastIndexOf("_"); line = line.substring(0, index1) + "<em>" + line.substring(index1 + 1, index2) + "</em>" + line.substring(index2 + 1); } while(line.contains("[") && line.contains("]") && line.contains("(") && line.contains(")")) { // 表示如果裡面包含了超連結 int index1 = line.indexOf("["); int index2 = line.indexOf("]"); int index3 = line.indexOf("("); int index4 = line.indexOf(")"); String link = line.substring(index3 + 1, index4); String text = line.substring(index1 + 1, index2); line = line.substring(0, index1) + "<a href=\"" + link + "\">" + text + "</a>" + line.substring(index4 + 1); } line = "<p>" + line + "</p>"; list.add(line); } }