Java 根据两个分隔符对字符串进行排序
Java sorting string based on two delimiters
我有以下格式的字符串
A34B56A12B56
我正在尝试根据前缀将数字分类到两个数组中。
例如:
- 数组 A: 34,12
- 数组 B: 56,56
最简单的方法是什么?
我已经尝试使用字符串分词器 class 并且我能够提取数字,但是无法确定前缀是什么。本质上,我只能将它们提取到一个数组中。
如有任何帮助,我们将不胜感激。
谢谢!
Andreas 似乎已经提供了一个很好的答案,但我想在 Java 中练习一些正则表达式,所以我编写了以下适用于任何典型字母前缀的解决方案:(注释是在线的.)
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);
}
输出:{A=[34, 12], B=[56, 56]}
我有以下格式的字符串 A34B56A12B56
我正在尝试根据前缀将数字分类到两个数组中。 例如:
- 数组 A: 34,12
- 数组 B: 56,56
最简单的方法是什么?
我已经尝试使用字符串分词器 class 并且我能够提取数字,但是无法确定前缀是什么。本质上,我只能将它们提取到一个数组中。
如有任何帮助,我们将不胜感激。
谢谢!
Andreas 似乎已经提供了一个很好的答案,但我想在 Java 中练习一些正则表达式,所以我编写了以下适用于任何典型字母前缀的解决方案:(注释是在线的.)
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);
}
输出:{A=[34, 12], B=[56, 56]}