Подстрока в Java UDF - PullRequest
       6

Подстрока в Java UDF

1 голос
/ 03 марта 2020

Я хочу извлечь слова перед "Curncy", используя подстроку и indexOf или любым другим рекомендуемым способом.

AED Curncy|0|6|UAE Dirham Spot|3.67300|12/12/2016|1.0000|N|USDAUD Curncy|0|6|USD-AUD X-RATE|1.385650|12/12/2018|1.0000|N|BGN Curncy|0|6|Bulgarian Lev Spot|1.720302|12/12/2015|1.0000|N|

Я хочу, чтобы значения заполнялись как:

AED
USAAUD
BGN

Пожалуйста, дайте мне знать, как получить желаемый результат.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Один из способов сделать это с очень простым регулярным выражением.

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    private static final Pattern PATTERN = Pattern.compile("(\\w*) Curncy");

    public static void main(String[] args) {
        String str = "AED Curncy|0|6|UAE Dirham Spot|3.67300|12/12/2016|1.0000|N|USDAUD Curncy|0|6|USD-AUD X-RATE|1.385650|12/12/2018|1.0000|N|BGN Curncy|0|6|Bulgarian Lev Spot|1.720302|12/12/2015|1.0000|N|";

        List<String> matches = new ArrayList<String>();
        Matcher m = PATTERN.matcher(str);
        while (m.find()) {
            matches.add(m.group(1));
        }

        System.out.println(matches);
    }
}

Это напечатает List совпадений, например, так:

[AED, USDAUD, BGN]

Подробнее о том, как использовать регулярное выражение шаблонов в Java.

1 голос
/ 06 марта 2020

Таким образом, используя фильтр, вы можете сделать это:

import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import org.apache.poi.util.SystemOutLogger;

public class StringUDF {

    public static void main(String... strings) {

        String s = "AED Curncy|0|6|UAE Dirham Spot|3.67300|12/12/2016|1.0000|N|USDAUD Curncy|0|6|USD-AUD X-RATE|1.385650|12/12/2018|1.0000|N|BGN Curncy|0|6|Bulgarian Lev Spot|1.720302|12/12/2015|1.0000|N|";

        Arrays.asList(s.split(Pattern.quote("|"))).stream().filter(stm -> stm.endsWith(" Curncy"))
                .collect(Collectors.toList()).stream().map(stm1 -> stm1.replaceAll(" Curncy", ""))
                .collect(Collectors.toList()).forEach(System.out::println);

    }

}
...