簡體   English   中英

如果它在 ArrayList 中,如何基於 Char 拆分字符串?

[英]How to split String based on a Char, if it is in an ArrayList?

我有一個 arraylist 數據結構如下:

        ArrayList<String> payments = new ArrayList<>();
        payments.add("Sam|gbp|10000.0");
        payments.add("John|usd|-100000.0");
        payments.add("Hannah|BTC|20.0");
        payments.add("Halim|btc|-50.0");

我想獲取每一行,然后將其拆分,但它不起作用。

 for (String payment : payments) {
                 String[] data = payment.split("|");
                 System.out.println(data[2]);
                 // Gives a list of characters.

}

我怎樣才能讓每一行分開,並在每一行內,我可以得到數據。

例如,檢查使用的是哪種貨幣。

問題與列表無關。 這是split命令。 該參數不是“在此字符串上拆分”。 該參數實際上是一個正則表達式 | 是“或”的正則表達式-ese,例如,要么是我左邊的東西,要么是我右邊的東西。 鑒於它的左邊和右邊什么都沒有,它等同於.split("") ,即給出一個字符列表。

解決方案是編寫一個匹配|的正則表達式 symbol: payment.split("\\|")會這樣做。 作為一般原則, payment.split(Pattern.quote("|"))也有效 - 並且是解決問題的通用方法:“我想拆分這個確切的文本,不管那個文本是什么” - 問正則表達式庫使用它的quote方法來轉義任何需要的 escaping。

首先,您正在使用 split 參數觸發正則表達式。

正確的用法是String[] data = payment.split("\\|");

然后,要獲取您的貨幣,請使用System.out.println(data[1]); . List- 和 Array-Indices 以 0 開頭,因此您需要的第二個字段可以通過[1]訪問。

如果你使用 Java 8,你可以

List<String> btcUsers =
               payments
                        .stream()
                        .filter(
                                payment -> payment.split("\\|")[1]
                                        .toLowerCase(Locale.ROOT)
                                        .equals("btc"))
                       .toList();

結果是

System.out.println(btcUsers);
[Hannah|BTC|20.0, Halim|btc|-50.0]

您應該記住,split function 采用正則表達式模式,不像 PHP。 所以你需要像下面這樣的轉義字符

String[] data = payment.split("\\|");

暫無
暫無

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

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