[Java]一段尚未雕琢的分词代码
package com.hy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Entry {
public static void main(String[] args) throws IOException{
// 取得用户输入的表达式
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入需要分词的文本:");
String rawExpression = br.readLine();
Lexer l=new Lexer(rawExpression);
}
}
package com.hy;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
// 分词器
public class Lexer {
public Lexer(String expression) {
String regex="\\s*((//.*)|([0-9]+)|(\"(\\\\\\\\\\\"|\\\\\\\\\\\\\\|\\\\\\\\n|[^\\\"])*\")"
+"|[A-Z_a-z][A-Z_a-z0-9]*|==|<=|>=|&&|\\|\\||\\p{Punct})?";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(expression);
matcher.useTransparentBounds(true).useAnchoringBounds(false);
int pos=0;
int end=expression.length();
while(pos<end) {
matcher.region(pos, end);
if(matcher.lookingAt()) {
if(matcher.group(1)!=null) {
System.out.print("1."+matcher.group(1));
if(matcher.group(2)!=null) {
System.out.print(" 2."+matcher.group(2));
if(matcher.group(3)!=null) {
System.out.print(" 3."+matcher.group(3));
}
}
}
System.out.println();
pos=matcher.end();
}
}
}
}
输出:
请输入需要分词的文本:int a=108;// 人数 1.int 1.a 1.= 1.108 1.; 1.// 人数 2.// 人数 请输入需要分词的文本:select a,b,c from tb1 where a='1' order by b desc 1.select 1.a 1., 1.b 1., 1.c 1.from 1.tb1 1.where 1.a 1.= 1.' 1.1 1.' 1.order 1.by 1.b 1.desc 请输入需要分词的文本:1+2*(4-3)-5 1.1 1.+ 1.2 1.* 1.( 1.4 1.- 1.3 1.) 1.- 1.5
诸位看官莫怪,一时没来得及收拾。
[Java]一段尚未雕琢的分词代码的更多相关文章
- Java认证:JavaRunnable线程编写接口代码
Java认证:JavaRunnable线程编写接口代码.JavaRunnable线程如何才能更好的适应目前的编程环境呢?下面我们就看看如何才能更好的进行相关环境.希望下面的文章对大家有所帮助.Java ...
- Java:程序不过是几行代码的集合
程序不过是几行代码的集合.就像下面这样: public class Test { public static void main(String[] args) { System.out.println ...
- Java中替换HTML标签的方法代码
这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...
- 一段显示隐藏列表HTML代码
一段显示隐藏列表HTML代码, 技巧在于把页面上的元素(“返回首页”)和控制显示/隐藏的元素(id=navs-menu)放在一个共同的div上,并在该div上绑定onmouseover和onmouse ...
- java mail实现Email的发送,完整代码
java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId ...
- 编程算法 - 字典分词 代码(C)
字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...
- C#和Java中执行SQL文件脚本的代码(非常有用)
原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...
- java中CRUD(增删查改)底层代码的实现
java中CRUD(增删查改)底层代码的实现: package com.station.dao; import com.station.model.Product; import java.sql.* ...
- “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- Redis-List常用命令
Redis-List常用命令 lpush key value- 将指定value推到指定key的最左端.假如有 key1 对应值为 1 2 3,现在lpush key1 4,将4推到队列的最左端,那么 ...
- Spring的核心jar包
Spring的主要jar包 四个核心jar包:beans.context.core.expression Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现Spring ...
- 百度编辑神器ueditor在ajax或form提交内容时候异常
百度编辑神器ueditor在ajax或form提交内容时候异常,一:⑴web.config中<system.web> <httpRuntime requestValidationMo ...
- Nginx返回大长度的JSON数据被截断
1 添加Nginx参数,增加缓存字符串大小 head{ proxy_buffers 16 512k; //此处值代表nginx 设置 16个 512k 的块进行缓存,总共大小为16*512k prox ...
- 3.Shell 接收用户的参数
1.Shell 传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数,Linux系统中的Shell脚本语言已经内设了用于接收参数的变量,变量之间可以使用空格间隔. 例如$0对应的是当前Shel ...
- goquery 解析不了noscript
今天在用goquery的时候 解析noscript标签的时候.发现一直获取不到里面的元素. google得到.需要去除noscript标签. s.Find("noscript"). ...
- JMeter 控件整理
一个线程组里多个请求的情况下,添加用户参数.如添加random函数,若不勾选“每次迭代更新一次”则每发送一个请求调用一次random函数,勾选上之后,整个线程组运行过程只调用一次random函数.
- Access数据库LIKE问题
access里like的通配符用法是这样:“?”表示任何单一字符: “*”表示零个或多个字符: “#”表示任何一个数字 有时候用%作为通配符不行,需要用*号作为通配符select * from tab ...
- mysql解除锁表
查看下在锁的事务 :SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 杀死进程id(就是上面命令的trx_mysql_thread_id列):kill 线程ID
- 特征工程之分箱--Best-KS分箱
变量的KS值 KS(Kolmogorov-Smirnov)用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距 .KS值越大,表示该变量越能将正,负客户的区分程度越大.通常来说,KS& ...