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