在Java中解析字符串有哪些不同的方法?

agw*_*ber 49 java string parsing

对于解析播放器命令,我最常使用split方法通过分隔符分割字符串,然后通过一系列ifs或switches 来计算其余部分.在Java中解析字符串有哪些不同的方法?

Dan*_*man 19

我非常喜欢正则表达式.只要命令字符串相当简单,您就可以编写一些可能需要几页代码手动解析的正则表达式.

我建议你查看http://www.regular-expressions.info,了解正则表达式的优秀介绍,以及Java的具体示例.

  • @Gaurav Vashishta,正则表达式对[lexing](http://en.wikipedia.org/wiki/Lexical_analysis)很有用,但这只是解析的第一步. (2认同)

and*_*wrk 16

我假设您正在尝试使命令界面尽可能宽容.如果是这种情况,我建议你使用类似这样的算法:

  1. 读入字符串
    • 将字符串拆分为标记
    • 使用字典将同义词转换为常用表单
    • 例如,将"hit","punch","strike"和"kick"全部转换为"hit"
    • 在无序的包容性基础上执行操作
    • 无序 - "将猴子打在脸上"与"猴子脸上的脸"相同
    • 包容性 - 如果命令应该是"在面对面打猴子"并且它们提供"打孔猴子",那么你应该检查这个匹配的命令数量.如果只有一个命令,请执行此操作.拥有命令优先级甚至可能是一个好主意,即使有匹配,它也会执行最高操作.


Bar*_*ski 13

手动解析很有趣......开头:)

实际上,如果命令不是很复杂,您可以像命令行解释器中使用的那样处理它们.您可以使用以下库列表:http://java-source.net/open-source/command-line.我想你可以从apache commons CLIargs4j(使用注释)开始.它们有很好的文档记录,使用起来非常简单.它们自动处理解析,您唯一需要做的就是读取对象中的特定字段.

如果你有更复杂的命令,那么创建一个正式的语法可能是一个更好的主意.有一个非常好的库,带有用于语法的图形编辑器,调试器和解释器.它被称为ANTLR(和编辑器ANTLRWorks)并且它是免费的:)还有一些示例语法和教程.


小智 7

我想看看Java的迁移魔域,并朝着一个简单的瘦自然语言处理器(或者通过标记化或正则表达式驱动),如下面的(此链接):

    public static boolean simpleNLP( String inputline, String keywords[])
    {
        int i;
        int maxToken = keywords.length;
        int to,from;
        if( inputline.length() = inputline.length()) return false; // check for blank and empty lines
        while( to >=0 )
        {
            to = inputline.indexOf(' ',from);
            if( to > 0){
                lexed.addElement(inputline.substring(from,to));
                from = to;
                while( inputline.charAt(from) == ' '
                && from = keywords.length) { status = true; break;}
            }
        }
        return status;
    }

...

任何让程序员有理由再次看到Zork的东西在我的书中都很好,只要注意Grues.

...


bpa*_*apa 6

Sun本身建议远离StringTokenizer并使用String.spilt方法.

您还需要查看Pattern类.


Joh*_*fle 6

对ANTLR/ANTLRWorks的另一次投票.如果你创建了两个版本的文件,一个是用于实际执行命令的Java代码,另一个是没有(只有语法),那么你就拥有了该语言的可执行规范,非常适合测试,对于文档来说是一个福音如果您决定移植它,那么节省大量时间.