写一个函数用来统计字符串中各字母出现的次数。(请用Java实现) 示例: 输入:X2Y3XZ,输出:X3Y3Z1; 输入:Z3X(XY)2,输出:X3Y2Z3; 输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
时间: 2024-02-19 13:58:13 浏览: 44
好的,以下是Java代码实现:
```java
import java.util.HashMap;
import java.util.Map;
public class CountLetters {
public static void main(String[] args) {
String str = "X2Y3XZ";
System.out.println(countLetters(str)); // 输出 X3Y3Z1
}
public static String countLetters(String str) {
Map<Character, Integer> countMap = new HashMap<>();
int i = 0;
while (i < str.length()) {
char c = str.charAt(i);
if (Character.isLetter(c)) {
int j = i + 1;
while (j < str.length() && Character.isDigit(str.charAt(j))) {
j++;
}
int count = Integer.parseInt(str.substring(i + 1, j));
countMap.put(c, countMap.getOrDefault(c, 0) + count);
i = j;
} else {
i++;
}
}
StringBuilder sb = new StringBuilder();
for (Character c : countMap.keySet()) {
sb.append(c);
sb.append(countMap.get(c));
}
return sb.toString();
}
}
```
思路解析:
- 遍历字符串中的每个字符,如果是字母就往后找到下一个非数字字符,提取中间的数字并统计字母出现的次数;
- 使用 HashMap 存储每个字母出现的次数;
- 遍历 Map 中的键值对,按照字母和次数的顺序拼接成字符串返回。