如果它在 ArrayList 中,如何基于 Char 拆分 String?

How to split String based on a Char, if it is in an 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 命令。该参数不是“在此字符串上拆分”。参数实际上是一个正则表达式| 对于 'or' 是常规的 expression-ese,例如,我左边的东西,或者我右边的东西。鉴于它的左边和右边什么都没有,它等同于 .split(""),即给出一个字符列表。

解决办法是写一个匹配|符号的正则表达式:payment.split("\|")就可以了。作为一般原则,payment.split(Pattern.quote("|")) 也有效 - 并且是解决问题的通用方法:“我想拆分这个确切的文本,不管那个文本是什么” - 要求正则表达式库转义任何需要转义的内容, 使用其 quote 方法。

首先,您正在使用拆分参数触发正则表达式。

正确的用法是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 函数采用正则表达式模式,与 PHP 不同。所以你需要像下面这样的转义字符

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