我有一个列表,其中包含如下所示的值列表
[a-xyz,b-yzx,c-aaa,d-rrr,a-qqq,b-hhh]
我需要上面的列表
[xyz,yzx,aaa,rrr,qqq,hhh]
答案 0 :(得分:1)
试试这个
List<String> list = Arrays.asList("a-xyz","b-yzx","c-aaa","d-rrr","a-qqq","b-hhh");
List<String> result = list.stream()
.map(s -> s.replaceFirst("^.*-", ""))
.collect(Collectors.toList());
System.out.println(result);
结果:
[xyz, yzx, aaa, rrr, qqq, hhh]
或Java7
List<String> list = Arrays.asList("a-xyz","b-yzx","c-aaa","d-rrr","a-qqq","b-hhh");
List<String> result = new ArrayList<>();
for (String s : list)
result.add(s.replaceFirst("^.*-", ""));
System.out.println(result);
答案 1 :(得分:1)
这里应该做几件事。首先,您需要删除封闭的[]
,以便可以拆分字符串。然后,你需要实际拆分它(用逗号)。然后,对于每个字符串,您需要删除-
之前的前缀。 Java 8的流为您提供了一种非常简洁的方法:
List<String> result =
Arrays.stream(str.substring(1, str.length() - 1).split(","))
.map(s -> s.replaceFirst("\\w-", ""))
.collect(Collectors.toList());
编辑:
在JDK 7及更低版本中,解决方案类似,但您必须使用循环而不是流:
String[] arr = str.substring(1, str.length() - 1).split(",");
List<Stirng> result = new ArrayList<>(arr.length);
for (String s : arr) {
result.add(s.replaceFirst("\\w-", ""));
}
答案 2 :(得分:0)
叫我老式的
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Split {
public static void main(String[] args) {
String[] ss = {"a-xyz","b-yzx","c-aaa","d-rrr","a-qqq","b-hhh"};
List<String> ll = new ArrayList<>();
ll.addAll(Arrays.asList(ss));
List<String> result = new ArrayList<>();
for(String s:ll) {
result.add(s.split("-")[1]);
}
System.out.println(result);
}
}
给出
[xyz, yzx, aaa, rrr, qqq, hhh]
答案 3 :(得分:0)
您可以使用相同的列表来使用list的set方法存储最终值。
import java.util.ArrayList;
public class SplitList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a-xyz");
list.add("b-yzx");
list.add("c-aaa");
list.add("d-rrr");
list.add("a-qqq");
list.add("b-hhh");
for(String st : list){
int index = list.indexOf(st); //get index of string
list.set(index,st.replaceFirst("\\w-", "")); //set only with required value
}
for(String st : list){
System.out.println(st);
}
}
}