【问题标题】:Split a String by multiple delimiters in java在java中通过多个分隔符拆分字符串
【发布时间】:2020-07-27 11:17:29
【问题描述】:

用多个分隔符分割字符串的可能方法是什么? 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[] 

           

【问题讨论】:

标签: java stringtokenizer


【解决方案1】:

你可以使用java中String的split方法拆分它们,然后检查它是否是数字。

字符串被#|, 分割一次或多次。

然后测试拆分字符串是否为数字,如下所示:

    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
        }
    }
 }

【讨论】:

  • 我不想在最终列表中出现list1和list2这两个词。最终列表只需要包含10456103、10456102等数字的数据
  • 我知道..这就是为什么检查数字并只拿它们..我打印出列表以表明它们不仅仅是数字
【解决方案2】:

出于您的考虑,您还可以将它们动态转换为列表地图以供以后处理。

它的工作原理如下:

  • [|#] 上拆分每个字符串
  • 过滤仅匹配\\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=[]

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 2017-03-21
    • 2010-11-29
    • 2013-03-03
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2018-05-05
    • 2011-03-29
    相关资源
    最近更新 更多