[英]Apache StrTokenizer How To Escape Quote and Comma in String Literal
[英]Inconsistent behaviour of StrTokenizer to split string
我試圖在給定的分隔符處拆分字符串,以允許分隔符在引號內被忽略。 例如
"foo; bar; 'foo; bar'"
給定定界符';'應該分成3個字符串 並引用char':
foo bar foo; bar
我正在按以下方式使用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.