zoukankan      html  css  js  c++  java
  • java写的分词小程序

     

    根据给出的正则式,构建分词程序,完成相应的分词任务,并返回所有单词以及单词类别。

    <关键字>-> int |for| while | do | return | break | continue

    <运算符>->   + | - | * | / |==| < | <= |!= | > | >=

    <界符>-> , | ; | ( | ) | {|}

    <标识符>-> letter (letter | digit)*

    <整型常数>-> digit digit*

    <小数>-> digit digit* . digit digit*

    程序说明(关键代码)

    public void getFenCi() throws Exception {   

            BufferedReader br = new BufferedReader(new InputStreamReader(

                    new FileInputStream(filePath)));

            //遍历每一行

            for (String line =br.readLine(); line != null; line = br.readLine()) {

              String[] s1 = line.trim().split(" ");//得到空格分开的字符串数组并且去掉首尾空格          

     for(int i=0;i<s1.length;i++){

     char[] CharArray= s1[i].toCharArray();

           for(char c : CharArray) {

          if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {//字母

                    if (match_4 == 1) {//之前是运算符

                        matchEqual_4();//str设置为运算符

                    }

                    if (match_3 == 1) {//之前是整数

                        matchEqual_3();

                    }

                    str1 = str1 + c;

                    match_1 = 1;

                } else if (match_4(c + "")) {//分隔符

                    if(match_1 == 1){

                        matchEqual_1();

                    }

                    if (match_4 == 1) {

                        matchEqual_4();

                    }

                    if (match_3 == 1) {

                        matchEqual_3();

                    }

                    str1 = "";

                    str1 = str1 + c;

                    setValue("5", str1);

                    str1 = "";

                } else if (match_2(c + "")) {//标识符

                    if(match_1 == 1){

                        matchEqual_1();

                    }

                    if (match_3 == 1) {

                        matchEqual_3();

                    }

                    str1 = str1 + c;

                    match_4 = 1;

                } else if (match_3(c + "")) {//数字匹配

                    if(match_1==1){

                        matchEqual_1();

                    }

                    if (match_4 == 1) {

                        matchEqual_4();

                    }

                    str1 = str1 + c;

                    match_3 = 1;

                }

    }

        }

            }

            br.close();

    }

    思路总结

    1程序主要利用str存储每一个分词,根据当前字符和前一个分词判断出是继续添加字符进分词,还是结束添加,并判断出分词类型,存储。最后通过map存储分词和类型。

    2正则式只是实现一部分,但是小数都没有实现,离真正分词程序有很大不同。

    3空格是默认的分隔符,每一行也应该是分隔的。因此用readline方法。并且通过line.trim().split(" ")得到空格分开的字符串数组并且去掉首尾空格。     

  • 相关阅读:
    codevs 1086 栈 2003年NOIP全国联赛普及组
    1200 同余方程 2012年NOIP全国联赛提高组
    【bzoj4939】【YNOI2016】掉进兔子洞(莫队)
    洛谷P3674 小清新人渣的本愿(莫队)
    Lucas卢卡斯定理
    组合数学习笔记
    洛谷P3178 [HAOI2015]树上操作(线段树)
    洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)
    洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
    bzoj3140: [Hnoi2013]消毒(二分图)
  • 原文地址:https://www.cnblogs.com/interfaceone/p/6741164.html
Copyright © 2011-2022 走看看