簡體   English   中英

在 Java 字符串中使用 split

[英]Using split in Java String

我需要用點'.'分割一個字符串但是有一個如下解釋的捕獲例如,如果一個字符串是這樣的

   String str = "A.B.C"

然后,用點分割,將得到A,B and C

但是如果某個部分用單引號標記,那么 split 應該忽略它

String str = "A.B.'C.D'"

然后,用點分割,應該給A,B and CD

我怎樣才能做到這一點?

如果字符串始終采用給定格式,您可以嘗試 : \\\\.(?![A-Za-z]')作為正則表達式

演示在這里

首先,在'和之后拆分,如果任何拆分結果以. ,分裂於. 再次。

"A.B.'C.D'"
=>
"A.B.", "C.D"
=> "A", "B", "C.D"

Java 8 示例

public static void main(String[] args) {
    final String str = "A.B.'C.D'";
    final List<String> result = new ArrayList<>();

    for (String singleQuoteSplitResultArrayElement : str.split("'")) {
        if (singleQuoteSplitResultArrayElement.endsWith(".")) {
            Collections.addAll(result, singleQuoteSplitResultArrayElement.split("\\."));
        } else {
            result.add(singleQuoteSplitResultArrayElement);
        }
    }

    System.out.println(result.stream().collect(Collectors.joining(", ")));
}

您可以做的如下 - 將使用單個字母和多個字母標記:

String input = "A.B.'C.D'";
//                                              | not following capital letter(s) and '
//                                              |           | dot (escaped)
//                                              |           |  | not followed by 
//                                              |           |  | capital letter(s) and '
System.out.println(Arrays.toString(input.split("(?<![A-Z]+?')\\.(?![A-Z]+?')")));

輸出

[A, B, 'C.D']

筆記

如果您希望它不區分大小寫,請在Pattern加上(?i)(?i)(?<![AZ]+?')\\\\.(?![AZ]+?')")

我不知道標准庫中有什么方法可以做到這一點。 不過,自己編寫並不太難:

public static String[] splitByDots(String s)
{
    List<String> ss = new ArrayList<>();
    boolean inString = false;
    int start = 0;

    for (int p = 0; p < s.length(); p++) {
        char ch = s.charAt(p);
        if (ch == '\'') {
            inString = !inString;
        }
        else if (ch == '.') { 
            if (!inString) {
                ss.add(s.substring(start, p));
                start = p + 1;
            }
        }
    }

    ss.add(s.substring(start));
    return ss.toArray(new String[ss.size()]);
}

如果要修剪空格或刪除引號字符,則必須稍微調整上面的代碼,否則它會按您的要求執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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