如何在不使用集合

时间:2017-09-14 21:51:07

标签: java arrays collections

我有一个我在String中转换的元素数组。 但是这个String再次保留了数组的元素,我无法将它与另一个String进行比较。

如何删除元素? 我不知道如何使用收藏集,还有另外一种方法吗?

char[] copyLoop = new char[26];
        for (int i = 0; i < letters.length; i++) {
            if (letters[i] > 1) {
                char c = (char) (i + 97);
                copyLoop[i] = c;       
            }
        }
        String rslt = String.copyValueOf(copyLoop);
        return rslt;

2 个答案:

答案 0 :(得分:2)

数组中没有“空”元素,也无法调整数组大小。您所能做的就是将您感兴趣的所有元素放在数组的一端(例如从零开始),它们之间没有“无趣”元素,然后从数组的一部分构造一个字符串。 / p>

使用另一个变量来存储数组中下一个“empty”元素的索引:每次找到一个字母时,都要增加此变量。完成迭代letters后,此变量将包含用于创建字符串的数组长度。

    char[] copyLoop = new char[26];
    int dst = 0;
    for (int i = 0; i < letters.length; i++) {
        if (letters[i] > 1) {
            char c = (char) (i + 97);
            copyLoop[dst++] = c;       
        }
    }
    return new String(copyLoop, 0, dst);

或者,当然,使用StringBuilder(在内部有效地做同样的事情):

    StringBuilder copyLoop = new StringBuilder(26);
    for (int i = 0; i < letters.length; i++) {
        if (letters[i] > 1) {
            char c = (char) (i + 97);
            copyLoop.append(c);       
        }
    }
    return copyLoop.toString();

答案 1 :(得分:0)

不幸的是没有。 Java中的数组不可缩小/可扩展,它们的大小设置为常量。有两种方法可以解决:

  1. 使用集合,即创建字符列表ArrayList<Character> list = new ArrayList<>();,使用它并删除每个循环周期后不需要的项目。

  2. 在for循环的每个循环中,当你需要删除数组中的项目时,只需创建一个较小的新char []数组,并将旧数组的内容复制到新数组,除了对于您删除的值。

  3. 另外,如果您正在使用Strings,建议使用可变的String类s.a. StringBuilder或StringBuffer,允许您从String中添加/删除字符。在您的情况下,这似乎是最好的解决方案。