簡體   English   中英

StrTokenizer拆分字符串的行為不一致

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM