【问题标题】:Java char Array - deleting elementsJava char Array - 删除元素
【发布时间】:2012-07-10 15:01:55
【问题描述】:

在 Java 中,我想从 char 数组中删除某些元素,所以它会执行以下操作:

char[] Array1 = {'h','m','l','e','l','l'};
Array1 = //character index[2] to character index[5]

如何做到这一点?

【问题讨论】:

    标签: java arrays char


    【解决方案1】:

    用于从字符数组中删除字符的 Java 函数:

    String msg = "johnny can't program, he can only be told what to type";
    char[] mychararray = msg.toCharArray();
    mychararray = remove_one_character_from_a_character_array_in_java(mychararray, 21);
    System.out.println(mychararray);
    
    public char[] remove_one_character_from_a_character_array_in_java(
                               char[] original, 
                               int location_to_remove)
    {
        char[] result = new char[original.length-1];
        int last_insert = 0;
        for (int i = 0; i < original.length; i++){
            if (i == location_to_remove)
                i++;
    
            result[last_insert++] = original[i];
        }
        return result;
    }
    

    上述方法打印删除了索引 21 的消息。您可以将它放在一个循环中以删除多个项目。从技术上讲,您不是在删除一个项目,而是在创建一个全新的 char 数组,并删除了该项目。您必须为每个删除单步执行整个字符串,这是非常低效的。

    在 Java 中使用 StringBuilder 从字符数组中按索引删除一个字符:

    String mystring = "inflation != stealing";
    char[] my_char_array = mystring.toCharArray();
    StringBuilder sb = new StringBuilder();
    sb.append(mystring);
    sb.deleteCharAt(10);
    my_char_array = sb.toString().toCharArray();
    System.out.println(my_char_array);             //prints "inflation = stealing"
    

    上面的代码从字符数组中删除了感叹号。如果要删除 RANGE 字符,请使用 sb.delete(10, 15);

    【讨论】:

    • 我们如何用 O(1) 空间做到这一点?
    【解决方案2】:

    是的,你可以为你使用 Arrays.copyOfRange(char[],starting index, ending index) 方法。

    你也可以查看这个--

    http://www.codingdiary.com/developers/developers/diary/javaapi/java/util/SampleCode/CopyofRange8ArrayExampleCode.html

    【讨论】:

      【解决方案3】:

      在 Java 中,您不能从数组中删除元素。但您可以:

      创建一个新的char[],只复制你想要保留的元素;为此,您可以使用System.arraycopy() 或更简单的Arrays.copyOfRange()。例如,仅复制数组的前三个字符:

      char[] array1 = {'h','m','l','e','l','l'};
      char[] array2 = Arrays.copyOfRange(array1, 0, 3);
      

      或者使用List&lt;Character&gt;,它可以让你获得一个包含一系列元素的子列表:

      List<Character> list1 = Arrays.asList('h','m','l','e','l','l');
      List<Character> list2 = list1.subList(0, 3);
      

      【讨论】:

      • 如何复制我想要的某些元素:'code'(char[] example = //first character to 3rd last.) 有没有范围方法或什么?
      【解决方案4】:

      你可以像这样使用Arrays.copyOfRange

      array1 = Arrays.copyOfRange(array1, 2, 5);
      

      更多info

      【讨论】:

        【解决方案5】:

        你可以用这个方法:

        public static char[] copyArray(char[] original, int start, int length)
        {
            char[] result = new char[length];
            for (int i = 0; i < length; i++)
            {
                result[i] = original[start + i];
            }
            return result;
        }
        

        【讨论】:

        猜你喜欢
        • 2017-06-15
        • 1970-01-01
        • 2013-12-10
        • 2015-06-07
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多