用java写一个函数用来统计字符串中各字母出现的次数。(编程语言不限) 示例: 输入:X2Y3XZ,输出:X3Y3Z1; 输入:Z3X(XY)2,输出:X3Y2Z3; 输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
时间: 2024-03-21 07:43:13 浏览: 19
以下是Java代码实现:
```java
public static String countLetters(String input) {
Map<Character, Integer> map = new HashMap<>();
StringBuilder output = new StringBuilder();
int i = 0;
while (i < input.length()) {
char c = input.charAt(i);
if (Character.isLetter(c)) {
int j = i + 1;
while (j < input.length() && Character.isDigit(input.charAt(j))) {
j++;
}
int count = Integer.parseInt(input.substring(i + 1, j));
map.put(c, map.getOrDefault(c, 0) + count);
i = j;
} else if (c == '(') {
int j = input.indexOf(')', i);
int count = Integer.parseInt(input.substring(j + 1, j + 2));
String subInput = input.substring(i + 1, j);
String subOutput = countLetters(subInput);
for (char subC : subOutput.toCharArray()) {
map.put(subC, map.getOrDefault(subC, 0) + count);
}
i = j + 2;
} else {
i++;
}
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
output.append(entry.getKey()).append(entry.getValue());
}
return output.toString();
}
```
该函数使用了一个 Map 来统计各字母出现的次数,并且处理了括号内的子字符串。具体实现细节见代码注释。