基于两个分隔符的Java排序字符串

基于两个分隔符的Java排序字符串,java,regex,string,stringtokenizer,Java,Regex,String,Stringtokenizer,我有一个以下格式的字符串 A34B56A12B56 我试图根据前缀将数字分成两个数组。 例如: 阵列A:34,12 阵列B:56,56 最简单的方法是什么 我已经尝试使用字符串标记器类,并且能够提取数字,但是无法判断前缀是什么。本质上,我只能将它们提取到单个数组中 任何帮助都将不胜感激 谢谢 Andreas似乎已经提供了一个很好的答案,但我想在Java中练习一些正则表达式,所以我编写了以下适用于任何典型字母前缀的解决方案:(注释是串联的。) String str=“A34B56A12B56”

我有一个以下格式的字符串 A34B56A12B56

我试图根据前缀将数字分成两个数组。 例如:

  • 阵列A:34,12
  • 阵列B:56,56
最简单的方法是什么

我已经尝试使用字符串标记器类,并且能够提取数字,但是无法判断前缀是什么。本质上,我只能将它们提取到单个数组中

任何帮助都将不胜感激


谢谢

Andreas似乎已经提供了一个很好的答案,但我想在Java中练习一些正则表达式,所以我编写了以下适用于任何典型字母前缀的解决方案:(注释是串联的。)

String str=“A34B56A12B56”;
//捕获前缀和后缀组的模式
字符串regexStr=“([A-z]+)([0-9]+)”;
//编译正则表达式模式
Pattern regexpatern=Pattern.compile(regexStr);
//创建匹配器
Matcher regexMatcher=regexpatern.Matcher(str);
HashMap prefixtonummap=新的HashMap();
//检索所有匹配项,添加到前缀bucket
while(regexMatcher.find()){
//获取字母前缀(为了通用性,假设可以是多个字母)
字符串前缀=regexMatcher.group(1);
//得到号码
long后缀=long.parseLong(regexMatcher.group(2));
//在地图中搜索列表
ArrayList nums=prefixtonummap.get(前缀);
//如果前缀为new,则使用添加的编号创建新列表,更新地图
如果(nums==null){
nums=新的ArrayList();
nums.add(后缀);
prefixtonummap.put(前缀,nums);
}else{//否则,将该编号添加到现有列表中
nums.add(后缀);
}
System.out.println(prefixtonummap);
}

输出:{A=[34,12],B=[56,56]}

扫描器可能擅长于此。请参阅例如…
input.split(“(?),这可以用有限状态机解决。谢谢Andreas。
String str = "A34B56A12B56";

// pattern that captures the prefix and the suffix groups
String regexStr = "([A-z]+)([0-9]+)";
// compile the regex pattern
Pattern regexPattern = Pattern.compile(regexStr);
// create the matcher
Matcher regexMatcher = regexPattern.matcher(str);

HashMap<String, ArrayList<Long>> prefixToNumsMap = new HashMap<>();
// retrieve all matches, add to prefix bucket
while (regexMatcher.find()) {
    // get letter prefix (assuming can be more than one letter for generality)
    String prefix = regexMatcher.group(1);
    // get number
    long suffix = Long.parseLong(regexMatcher.group(2));

    // search for list in map
    ArrayList<Long> nums = prefixToNumsMap.get(prefix);
    // if prefix new, create new list with the number added, update the map
    if (nums == null) {
        nums = new ArrayList<Long>();
        nums.add(suffix);
        prefixToNumsMap.put(prefix, nums);

    } else { // otherwise add the number to the existing list
        nums.add(suffix);
    }

    System.out.println(prefixToNumsMap);
}