- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
是否有 Java 的 shlex 替代品?我希望能够像 shell 处理它们一样拆分引号分隔的字符串。例如,如果我发送:
one two "three four"并执行拆分,我想收到 token
one
two
three four
最佳答案
我今天遇到了类似的问题,看起来像 StringTokenizer、StrTokenizer、Scanner 等任何标准选项都不适合。但是,实现基础知识并不难。
此示例处理当前对其他答案发表评论的所有边缘情况。请注意,我还没有检查它是否完全符合 POSIX。要点包括可用的单元测试 on GitHub - 通过未经许可在公共(public)领域发布。
public List<String> shellSplit(CharSequence string) {
List<String> tokens = new ArrayList<String>();
boolean escaping = false;
char quoteChar = ' ';
boolean quoting = false;
int lastCloseQuoteIndex = Integer.MIN_VALUE;
StringBuilder current = new StringBuilder();
for (int i = 0; i<string.length(); i++) {
char c = string.charAt(i);
if (escaping) {
current.append(c);
escaping = false;
} else if (c == '\\' && !(quoting && quoteChar == '\'')) {
escaping = true;
} else if (quoting && c == quoteChar) {
quoting = false;
lastCloseQuoteIndex = i;
} else if (!quoting && (c == '\'' || c == '"')) {
quoting = true;
quoteChar = c;
} else if (!quoting && Character.isWhitespace(c)) {
if (current.length() > 0 || lastCloseQuoteIndex == (i - 1)) {
tokens.add(current.toString());
current = new StringBuilder();
}
} else {
current.append(c);
}
}
if (current.length() > 0 || lastCloseQuoteIndex == (string.length() - 1)) {
tokens.add(current.toString());
}
return tokens;
}
关于java - Java 的 shlex 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082953/
sample = ",," values = shlex.shlex(sample, posix=True) values.quotes = '"' values.whitespace = ',' v
感谢 shlex 这种字符串,我想拆分: str = 'This doesn''t work' 54e+5 15 .FALSE. 'Another example of "test"' 预期结果: 这
我将 Popen 与 shlex 一起用于 yum 命令,并使用 --exclude 标志来传递要排除的软件包列表。由于某种原因,shlex 似乎没有保留双引号。有什么指示我该怎么做吗? >>> im
我需要将一系列字符串拆分为由空格表示的 3 个组成部分。这些字符串有时包含子列表,但始终作为字符串的最后一个组成部分。 我之前使用 Shlex 取得了巨大的成功,但我不再获得所需的结果,因为我最近的子
这个简单的代码: s = "it's a nice day..." s = shlex.split(s) 将导致 ValueError: No closing quotation错误: Traceba
我正在使用 shlex 解析 csv 文件,并且需要保留连续的空白字符,如下所示... line = 'a, b, "c, z",,,d,e,f' spltr = shlex.shlex(line)
我有以下文字: 'sudo -S java -cp spinn3r-client-3.4.06.jar com.spinn3r.api.Main --vendor=test --remote-filt
这个问题已经有答案了: How do I use subprocess.Popen to connect multiple processes by pipes? (9 个回答) 已关闭 7 年前。
如何使用 Python 的 shlex 拆分字符串,同时保留 shlex 拆分的引号字符? 示例输入: Two Words "A Multi-line comment." 期望的输出: ['Two'
语言:Python v2.6.2 操作系统:AIX 5.3 我正在使用 Python 将一些文件从备份恢复到测试系统 - 所有命令都以下面的方式调用,但有些命令根本不想工作。 #!/usr/bin/p
在 Python 中,如何使用 shlex.split() 或类似的方法来拆分字符串,只保留双引号?例如,如果输入是 "hello, world"is what 'i say' 那么输出将是 ["he
如何反转 shlex.split 的结果?也就是说,我怎样才能获得一个带引号的字符串 "resemble that of a Unix shell" ,给定一个我希望引用的字符串的 list? 更新0
如何在使用 shlex.split() 时保留“带空格的值”周围的引号? s = "SOME_VAR=\"value with spaces\" VAR2=value2" shlex.split(s)
是否有 Java 的 shlex 替代品?我希望能够像 shell 处理它们一样拆分引号分隔的字符串。例如,如果我发送: one two "three four"并执行拆分,我想收到 token on
我想看看 shlex对于我正在尝试构建的东西来说是一个不错的选择,所以我想我会把它放在 debug mode 中玩弄它。只有 shlex 的构造函数有这个 weird thing it does :
根据文档,在 Python 2.7.3 中,shlex 应该支持 UNICODE。但是,当运行下面的代码时,我得到:UnicodeEncodeError: 'ascii' codec can't en
Python 的标准库有一个 shlex.quote函数接受一个字符串并返回一个保证被 Unix shell 解释为相同字符串的函数。这是通过将字符串放在单引号中并转义出现在其中的任何单引号字符来实现
我想拆分ascii文本 1 'K\^o, Suk\'e' 打印为 Python 字符串 line = "1 'K\\^o, Suk\\'e'\n" 进入 ['1', 'K\\^o, Suk\\'e']
我将如何在 Node.js 中执行以下操作?我意识到可能没有内置功能或为此编写的模块,那么我该如何实现呢? >>> import shlex >>> shlex.split("-a arga -b \
我需要在 elisp 中解析命令行,例如: (shlex-split "command \"Some file with spaces\" someother\ quote") ;;That give
我是一名优秀的程序员,十分优秀!