在 Java 中分割命令行

2024-03-04

在 Java 中解析类似 shell 的命令行的推荐方法是什么?我的意思并不是说在选项已经处于数组形式时处理选项(例如处理“-x”等),已经有很多关于此的问题和答案。

不,我的意思是把完整的命令字符串分割成“令牌”。我需要转换一个字符串,例如:

user 123712378 suspend "They are \"bad guys\"" Or\ are\ they?

...到列表/数组:

user
123712378
suspend
They are "bad guys"
Or are they?

我目前只是对空格进行分割,但这显然无法处理引号和转义空格。

(引号处理是最重要的。转义空格是最好的)

注意:我的命令字符串是来自类似 shell 的 Web 界面的输入。它不是由main(String[] args)


您需要的是实现一个有限自动机。您需要逐个字符读取字符串,并根据下一个或上一个字符找到下一个状态。
例如一个"表示字符串的开头,但如果它前面有\保持当前状态不变并读取,直到下一个标记将您带到下一个状态。
IE。基本上在你的例子中你会有

read string -> read number   
      ^  -    -   -  |  

您当然需要定义所有状态以及影响或不影响您的状态的特殊字符。
老实说,我不确定您为什么要向最终用户提供此类功能。
传统上,所有 cli 程序都接受标准格式的输入-x or --x or --x=s etc.
这种格式对于典型用户来说是众所周知的,并且易于实现和测试是否正确。
传统上如果我们需要为用户提供更“灵活”的输入,最好构建一个GUI。这就是我的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中分割命令行 的相关文章

随机推荐