gpt4 book ai didi

java - StrTokenizer 分割字符串的行为不一致

转载 作者:行者123 更新时间:2023-12-01 09:44:40 25 4
gpt4 key购买 nike

我试图在给定的分隔符处拆分字符串,从而允许忽略引号内的分隔符。例如。

“foo; bar; 'foo; bar'”

应该被分割成 3 个字符串,并给出分隔符 ';'并引用 char ':

foo
酒吧
富;酒吧

我正在使用StrTokenizer如下所示,但它似乎不适用于 "foo; bar; 'foo; bar'" 但它确实适用于 "'foo; bar'; foo; bar;"

谁能解释一下哪里出了问题吗?

import org.apache.commons.lang3.text.StrTokenizer;
public class Main {
public static void main(String[] args) {

String x= "foo; bar; 'foo; bar'";

StrTokenizer tokens= new StrTokenizer(x, ';', '\'');

for (String token : tokens.getTokenArray()) {
System.out.println(token.trim());
}
// Prints:
// foo
// bar
// 'foo
// bar'

/* --------- */
// THIS IS OK:
x= "'foo; bar'; foo; bar";

tokens= new StrTokenizer(x, ';', '\'');

for (String token : tokens.getTokenArray()) {
System.out.println(token.trim());
}
// Prints:
// foo; bar
// foo
// bar
}
}

最佳答案

默认情况下,引号区域前面不能有除分隔符之外的任何字符(甚至空格)(因此 ; 'quote' 不行,但 ;'qupte' 很好)-(这有点奇怪,因为引号末尾和分隔符之间的空格似乎不会引起任何问题,这可能表明这可能是一个错误)。

显式设置应修剪的字符似乎可以解决此问题(而且您不再需要在打印语句中添加 trim() ):

StrTokenizer tokens = new StrTokenizer(x, ';', '\'');
tokens.setTrimmerMatcher(StrMatcher.spaceMatcher());// <- add this line

要修剪:空格、制表符、换行符和换页符,请使用 StrMatcher.splitMatcher()

关于java - StrTokenizer 分割字符串的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com