首页>代码>javascript代码关键字高亮字符串注释彩色显示>/javascript解析器/javascript_3/src/com/wgtgt/Main.java
package com.wgtgt;

import qq.q757225051.utils.FileUtils;

public class Main {
	public static void main(String[] args) {
		String fileName = "src/aa.js";
		char[] chs = FileUtils.readToChars(fileName);
		StringBuilder sb = new StringBuilder();
		boolean yh = false;
		for (int i = 0; i < chs.length; i++) {
			String keyWord;
			String word;
			if (chs[i] == '/') {
				keyWord = "//";
				word = judgeNext(chs, i, keyWord);
				if (word == null) {
					if (i + 1 < chs.length && chs[i + 1] != '*') {
						sb.append(cast(chs[i]));
					}
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_ZHUSHI
							+ ";\">");
					if (i + 1 < chs.length && chs[i + 1] == '*') {
						sb.append(chs[i]);
					}
					while (i < chs.length && chs[i] != '\r') {
						sb.append(cast(chs[i]));
						i++;
					}
					sb.append("</span>");
					sb.append("<br>");
					continue;
				}

				keyWord = "/*";
				word = judgeNext(chs, i, keyWord);
				if (word == null) {
					sb.append(cast(chs[i]));
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_ZHUSHI
							+ ";\">");
					while (i < chs.length - 1) {
						if (chs[i] == '*' && chs[i + 1] == '/') {
							sb.append("*/");
							i++;
							break;
						}
						sb.append(cast(chs[i]));
						i++;
					}
					sb.append("</span>");
					continue;
				}
			}

			switch (chs[i]) {
			case 'v':
				keyWord = "var";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 'f':
				keyWord = "function";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {

				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
					break;
				}
				keyWord = "for";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {

				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
					break;
				}
				keyWord = "false";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {

				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
					break;
				}
				sb.append(chs[i]);
				break;
			case 'i':
				keyWord = "if";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 'e':
				keyWord = "else";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 'b':
				keyWord = "break";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 'c':
				keyWord = "continue";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 'w':
				keyWord = "while";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case 't':
				keyWord = "true";
				word = judgeBack(chs, i, keyWord);
				if (word == null) {
					sb.append(chs[i]);
				} else {
					sb.append("<span style=\"color:" + util.Count.COLOR_KEYWORD
							+ ";\">");
					sb.append(word);
					sb.append("</span>");
					i = i + keyWord.length() - 1;
				}
				break;
			case '<':
				sb.append("&lt;");
				break;
			case '>':
				sb.append("&gt;");
				break;
			case '&':
				sb.append("&amp;");
				break;
			case ' ':
				sb.append("&nbsp;");
				break;
			case '\t':
				sb.append("&nbsp;&nbsp;");
				break;
			case '"':
				if (yh) {
					sb.append(chs[i]);
					sb.append("</span>");
					yh = false;
				} else {
					sb.append("<span style=\"color:");
					sb.append(util.Count.COLOR_STRING);
					sb.append(";\">");
					sb.append(chs[i]);
					yh = true;
				}

				break;
			case '\r':
				sb.append("<br>");
			default:
				sb.append(chs[i]);
				break;
			}
		}
		System.out.println(sb.toString());
	}

	public static boolean judgePrev(char[] chs, int index) {
		if (index < 0) {
			return true;
		} else {
			char ch = chs[index];
			if (Character.isLetterOrDigit(ch)) {
				return false;
			} else {
				return true;
			}
		}

	}

	public static String judgeBack(char[] chs, int index, String keyWord) {
		char[] chList = keyWord.toCharArray();
		if (!judgePrev(chs, index - 1)) {
			return null;
		}
		int len = chs.length;
		for (int i = 1; i < chList.length; i++) {
			if (index + i < len && chs[index + i] != chList[i]) {
				return null;
			}
		}
		return keyWord;
	}

	public static String judgeNext(char[] chs, int index, String keyWord) {// 2
		if (index + keyWord.length() >= chs.length) {
			return null;
		}
		char[] chList = keyWord.toCharArray();
		for (int i = 1; i < chList.length; i++) {
			if (chs[index + i] != chList[i]) {
				return null;
			}
		}
		return keyWord;
	}

	public static String cast(char ch) {
		switch (ch) {
		case '<':
			return "&lt;";
		case '>':
			return "&gt;";
		case '&':
			return "&amp;";
		case '\r':
			return "<br>";
		case ' ':
			return "&nbsp;";

		default:
			return String.valueOf(ch);
		}
	}
}
最近下载更多
zhouzhunxing  LV1 2017年8月21日
wade123  LV31 2014年7月30日
wangfengjun  LV1 2014年7月29日
289647048@qq.com  LV2 2014年7月18日
莫欺少年穷Java  LV8 2014年6月22日
ll8803268816  LV2 2014年6月21日
veinrein  LV27 2014年6月20日
最代码官方  LV168 2014年6月19日
最近浏览更多
3539550597  LV1 7月1日
huilenet  LV15 2022年9月5日
3465554242 2022年5月12日
暂无贡献等级
ls2008  LV15 2021年12月23日
zuitest123 2020年7月6日
暂无贡献等级
1207532921  LV1 2019年8月31日
qq1020329140  LV2 2019年1月18日
1211413075  LV14 2019年1月5日
Ganhua  LV10 2018年9月11日
没有人-大魔王  LV7 2018年9月7日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友