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]一段尚未雕琢的分词代码的更多相关文章

  1. Java认证:JavaRunnable线程编写接口代码

    Java认证:JavaRunnable线程编写接口代码.JavaRunnable线程如何才能更好的适应目前的编程环境呢?下面我们就看看如何才能更好的进行相关环境.希望下面的文章对大家有所帮助.Java ...

  2. Java:程序不过是几行代码的集合

    程序不过是几行代码的集合.就像下面这样: public class Test { public static void main(String[] args) { System.out.println ...

  3. Java中替换HTML标签的方法代码

    这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...

  4. 一段显示隐藏列表HTML代码

    一段显示隐藏列表HTML代码, 技巧在于把页面上的元素(“返回首页”)和控制显示/隐藏的元素(id=navs-menu)放在一个共同的div上,并在该div上绑定onmouseover和onmouse ...

  5. java mail实现Email的发送,完整代码

    java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId ...

  6. 编程算法 - 字典分词 代码(C)

    字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...

  7. C#和Java中执行SQL文件脚本的代码(非常有用)

    原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...

  8. java中CRUD(增删查改)底层代码的实现

    java中CRUD(增删查改)底层代码的实现: package com.station.dao; import com.station.model.Product; import java.sql.* ...

  9. “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. Flutter-动画-概念篇

    一.Flutter中的动画的基本概念图 二.Flutter各动画的概念 视图动画 补间动画 就是一个View,定义了起点和终点.时间以及运动曲线,并按照所定规则由起点运动到终点的过程. 帧动画 帧动画 ...

  2. Spring面试题整理

    1.https://blog.csdn.net/a745233700/article/details/80959716 2.https://ifeve.com/spring-interview-que ...

  3. php底层的运行机制和原理

    php设计的理念及特点 PHP 被设计为一种适用于web开发的动态脚本语言,同时具有解释型和弱类型,底层完全由C语言实现. 解释型即程序边运行边解释,一行一行运行. 弱类型即变量类型一开始并不是确定的 ...

  4. current status of the installation and the internationalization of Samba 3.0

    Only about 8 months from release of Samba 3.0.0, there is beginning to be the transition from 2.2.x. ...

  5. 身份证js正则

    /* 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位 ...

  6. Linux用户组管理及用户权限1

    bash的基础特性:    globbing:文件名通配(整体文件名匹配,而非部分)        匹配模式:元字符            *:匹配任意长度的任意字符                例 ...

  7. springboot集成redis使用redis作为session报错ClassNotFoundException类RememberMeServices

    springboot 集成redis使用redis作为缓存,会报错的问题. 错误信息: java.lang.IllegalStateException: Error processing condit ...

  8. python3.6 错误: ModuleNotFoundError:No module named "Crypto"

    原因及处理:在使用python是经常会用到import一个第三方库,但是有时候会提示某个模块不存在,如Crypto其实是因为Python3里面这个模块的名字变了, pip install pycryp ...

  9. java poi 读取excel内容

    import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import or ...

  10. top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令。 按 q 退出

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令. 按 q 退出