【发布时间】:2013-06-13 02:07:16
【问题描述】:
我正在尝试将数组的连续元素减少到一个,但不是针对所有值,例如:
{3,0,0,0,3,3,3,0,0,0} => {3,0,3,0}
但对于特定的,在我的示例中为 0:
{3,0,0,0,3,3,3,0,0,0} => {3,0,3,3,3,0}
所以只有零(三个是完整的)被减少了。
我编写了 Java String 工作代码:
public static String removeConsecutive(String str, char remove) {
char[] chars = str.toCharArray();
int current = 0;
int result = current;
while (current < chars.length) {
if (chars[current] == remove) {
// keep the first occurrence
chars[result++] = chars[current++];
// ignore the others
while (current < chars.length && chars[current] == remove) {
++current;
}
} else {
chars[result++] = chars[current++];
}
}
return new String(chars, 0, result);
}
它成功了:
public static void main(String[] args) {
System.out.println(removeConsecutive("000300300030303330000", '0'));
}
输出:0303030303330
任何人都可以提出任何改进建议,因为它认为代码并不完美。
【问题讨论】:
-
我认为这是codereview.stackexchange.com的一个好问题
-
@vidit,谢谢。我会将其发布在 codereview 上,并将链接粘贴到该讨论。
-
While循环可能是无限循环。尽可能避免它们。在这种情况下,您可以将其替换为foreach语句。
标签: java arrays string algorithm