ccf-Markdown--字符串模拟-

题干真的是太长了,自己去ccf官网看要求吧,真的是这个题相当繁杂了,

思路:遇到空行(题目格式)就输出这个区块,记录前一行的值来输出结束标签</>,由于输入的最后一行是没有空行的,所以最后单独输出一下即可

看代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String line = null;
        String preline = null;
        String text = "";
        int start,end;
        while(sc.hasNextLine()){
            line = sc.nextLine();
            if(line == null || line.length() == 0){
                if(preline == null){//连续空行,跳过
                    continue;
                }
                //遇到空行,说明区块结束了,可以输出区块的转换结果了
                if(preline.contains("<h")){
                    System.out.print(preline);
                }else if(preline.contains("<ul>")){
                    preline += "\n"+"</ul>"+"\n";
                    System.out.print(preline);
                }else if(preline.contains("<p>")){
                    preline += "</p>"+"\n";
                    System.out.print(preline);
                }
                //每次输出一个区块都要讲前面的preline置为null
                preline = null;
                continue;
            }
            //强调
            while((start = line.indexOf("_")) != -1){
                end = line.indexOf("_",start+1);
                text = line.substring(start, end+1);
                line = line.replace(text,"<em>"+text.substring(1,text.length()-1)+"</em>");
            }
            //超链接
            while((start = line.indexOf("[")) != -1){
                end = line.indexOf("]",start+1);
                text = line.substring(start+1, end);
                int khstart = line.indexOf("(",end);
                int khend = line.indexOf(")",khstart);
                String link = line.substring(khstart+1,khend);
                line = line.replace("["+text+"]"+"("+link+")","<a href=\""+link+"\""+">"+text+"</a>");
            }
            //处理区块
            //标题
            int num = 0;
            if(line.startsWith("#")){
                while(line.startsWith("#") && num <=6){
                    line = line.substring(1);
                    num++;
                }
                //忽略标题前的空格
                while(line.startsWith(" ")){
                    line = line.replaceFirst(" ","");
                }
                preline = "<h"+num+">"+line+"</h"+num+">"+"\n";
            //无序列表
            }else if(line.startsWith("*")){
                //消除星号
                line = line.replace("*", "");
                //消除星号后面的一个或多个空格
                while(line.startsWith(" ")){
                    line = line.substring(1);
                }
                if(preline == null){
                    preline = "<ul>"+"\n"+"<li>"+line+"</li>";
                }else{
                    preline += "\n"+"<li>"+line+"</li>";
                }
            }else{//段落
                if(preline == null){
                    preline = "<p>"+line;
                }else{
                    preline += "\n"+line;
                }
            }
       }
       //最后一个区块是没有空行的,所以输入结束后还要输出最后一个区块的转换结果
      if(preline.contains("<h")){
          System.out.print(preline);
      }else if(preline.contains("<ul>")){
          preline += "\n"+"</ul>"+"\n";
          System.out.print(preline);
      }else if(preline.contains("<p>")){
          preline += "</p>"+"\n";
          System.out.print(preline);
      }
    }
}

思考:你永远不知道Java的字符串有多强大。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值