I want to extract words in front of "Curncy" using substring and indexOf or by any other recommended way.
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|
I want values to be populated as:
AED
USAAUD
BGN
Kindly let me know how to get the desired output.
One way to do it is with a very simple regular expression.
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);
}
}
This will print the List
of matches like so:
[AED, USDAUD, BGN]
More info on how to use regular expression patterns in Java.
This way using filter you can do it:
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);
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.