我有一个用于 2D 平台游戏中编辑器的 String
,用户可以单击 16x60 矩形板来创建自定义板。我循环遍历这些矩形并得到一个我想要修剪的字符串。 x 是 block ,a 是空白区域。我需要这个来绘制关卡。
String s = "x1x1x1x1a1a1x1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1";
我想将其修剪为x4a2x1a54
。基本上是将紧随其后出现的 x 和 a 相加。
我该怎么做?
最佳答案
循环字符并存储最后一个字母字符。对于每个字符,解析其后面的数字。如果字母字符与最后一个字符相同,您可以将此数字添加到计数中,否则将旧结果写入输出:
public static String compress(String input) {
if (input == null || input.isEmpty()) {
return input;
}
char type = ' ';
int count = 0;
StringBuilder output = new StringBuilder();
int index = 0;
final int length = input.length();
while (index < length) {
char elementType = input.charAt(index);
// parse number
int elementCount = 0;
char c;
for (index++; index < length && Character.isDigit(c = input.charAt(index)); index++) {
elementCount = 10 * elementCount + (c - '0');
}
if (elementType == type) {
count += elementCount;
} else {
// finish counting last type
output.append(type).append(count);
type = elementType;
count = elementCount;
}
}
output.delete(0, 2); // remove substring added for the initial count/type
output.append(type).append(count); // append last entry
return output.toString();
}
这允许您输出与 1
不同的数字,例如
compress("a22a20x9")
关于java - 如何按顺序统计字符串中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200512/