在 java 中用多个定界符拆分字符串
Split a String by multiple delimiters in java
用多个分隔符拆分字符串的可能方法是什么? StringTokenizer 可以帮我实现这个吗?
String str="list1|10456103|10456102|10456121#list2|10456105|10456122";
String str="list1|10513846#list2|";
String str3="list1#list2|10509855";
String str4="list2|10481812|";
String str5="list1|10396496|";
String str6="list1#list2|";
所以现在我应该只能提取长值了:
For Str1 Finallist=[10456103,10456102,10456121,10456105,10456122]
For Str2 Finallist=[10513846]
For Str3 Finallist=[10509855]
For Str4 Finallist=[10481812]
For Str5 Finallist=[10396496]
For Str6 Finallist[]
您可以使用 split
方法对 java 中的字符串进行拆分,然后检查它是否为数字。
字符串被 #
或 |
或 ,
一次或多次分割。
然后测试拆分字符串是否为数字,因此:
public static void main(String []args){
String str="list1|10456103|10456102|10456121#list2|10456105|10456122";
String arr[] = str.split("[|,#]+");
for(String s: arr){
try{
int num=Integer.parseInt(s);
System.out.println(num + " is a number"); //add to list
}catch(Exception err) {
System.out.println(s + " is not a number"); //don't add to list
}
}
}
考虑到您的考虑,您还可以将它们动态转换为列表映射以供以后处理。
它的工作原理如下:
- 在
[|#]
上拆分每个字符串
- 筛选仅匹配
\d+
的号码
- 转换为长整数
- 并保存到列表
LinkedHashMap
只是保留最终地图中的处理顺序。这并不是真正需要的。
String[] strings = { str1, str2,str3,str4,str5,str6 };
Map<String, List<Long>> map = IntStream
.range(0, strings.length)
.boxed()
.collect(Collectors.toMap(i->"str"+(i+1),
i->Arrays.stream(strings[i].split("[|#]"))
.filter(str->str.matches("\d+"))
.map(Long::valueOf)
.collect(Collectors.toList()),
(a,b)->a, LinkedHashMap::new));
map.entrySet().forEach(System.out::println);
版画
str1=[10456103, 10456102, 10456121, 10456105, 10456122]
str2=[10513846]
str3=[10509855]
str4=[10481812]
str5=[10396496]
str6=[]
用多个分隔符拆分字符串的可能方法是什么? StringTokenizer 可以帮我实现这个吗?
String str="list1|10456103|10456102|10456121#list2|10456105|10456122";
String str="list1|10513846#list2|";
String str3="list1#list2|10509855";
String str4="list2|10481812|";
String str5="list1|10396496|";
String str6="list1#list2|";
所以现在我应该只能提取长值了:
For Str1 Finallist=[10456103,10456102,10456121,10456105,10456122]
For Str2 Finallist=[10513846]
For Str3 Finallist=[10509855]
For Str4 Finallist=[10481812]
For Str5 Finallist=[10396496]
For Str6 Finallist[]
您可以使用 split
方法对 java 中的字符串进行拆分,然后检查它是否为数字。
字符串被 #
或 |
或 ,
一次或多次分割。
然后测试拆分字符串是否为数字,因此:
public static void main(String []args){
String str="list1|10456103|10456102|10456121#list2|10456105|10456122";
String arr[] = str.split("[|,#]+");
for(String s: arr){
try{
int num=Integer.parseInt(s);
System.out.println(num + " is a number"); //add to list
}catch(Exception err) {
System.out.println(s + " is not a number"); //don't add to list
}
}
}
考虑到您的考虑,您还可以将它们动态转换为列表映射以供以后处理。
它的工作原理如下:
- 在
[|#]
上拆分每个字符串
- 筛选仅匹配
\d+
的号码
- 转换为长整数
- 并保存到列表
LinkedHashMap
只是保留最终地图中的处理顺序。这并不是真正需要的。
String[] strings = { str1, str2,str3,str4,str5,str6 };
Map<String, List<Long>> map = IntStream
.range(0, strings.length)
.boxed()
.collect(Collectors.toMap(i->"str"+(i+1),
i->Arrays.stream(strings[i].split("[|#]"))
.filter(str->str.matches("\d+"))
.map(Long::valueOf)
.collect(Collectors.toList()),
(a,b)->a, LinkedHashMap::new));
map.entrySet().forEach(System.out::println);
版画
str1=[10456103, 10456102, 10456121, 10456105, 10456122]
str2=[10513846]
str3=[10509855]
str4=[10481812]
str5=[10396496]
str6=[]