Java中字符串结尾的字符串

时间:2013-07-23 16:25:08

标签: java arrays char

我正在解决一个简单的问题:

在Java中删除字符数组的某些字符,这个想法很简单:

static void remove_char(char[] arr, char c){
    int r = 0;
    for (int i = 0 ; i < arr.length ; i++){
        if (arr[i] == c){
            r++;
            continue;
        }
        arr[i - r] = arr[i];
    }
    arr[arr.length - r] = '\0'; // ??
    return;
}

我想放一个ending character来表示在我们想要的时候不必考虑数组的其余部分,例如,使用new String(arr)生成一个字符串

Java中有这样的字符吗? (我猜在C它是\0,但我不确定)

例如,当我们打电话时:

System.out.println(new String(remove_char(new char[] {'s','a','l','a','m'} , 'a')))

将打印出来:slm m

虽然我想获得slm而我想这样做in-place不使用新数组

2 个答案:

答案 0 :(得分:7)

Java没有像C那样“标记”字符串结尾。它跟踪长度&amp;值,因此字符串中可能有零个字符(\0)。如果您从包含String个字符的char数组创建\0,则结果String将包含这些字符。

另请注意,数组具有静态大小 - 无法重新调整大小,因此您必须自己跟踪“大小”(String构造函数不会从char的末尾删除不需要的字符)数组)。

考虑使用:

  • Clyde Byrd III建议的StringBuilder,或

  • String(char value[], int offset, int count);您必须以编程方式确定offsetcount的适当值。也许String方法,例如replaceconcatsubstring可能会有所帮助。

答案 1 :(得分:2)

首先,String a char[]String 使用 char[],但仅此而已。

你所建议的是一个特殊字符的自定义解释,以标记一个char数组的“使用范围”,如果这是你为你的方法创建的合约,这很好。

所有字符都是java中的“有效”字符,但是正式保证unicode“非字符”永远不会用于编码字符:\uFDD0\uFDEF\uFFFE\uFFFF

您可以考虑使用其中一种作为“范围结束”标记字符。