Java中字符串结尾的字符串

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

在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不使用新arrays的情况下in-place执行此操作

Java没有像C那样“标记”字符串结尾。 它跟踪长度和值,因此可以在字符串中使用零字符( \0 )。 如果从包含\0字符的char数组创建String ,则生成的String将包含这些字符。

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

考虑使用:

  • Clyde Byrd III建议的StringBuilder ,或

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

首先, String 不是 char[]String 使用 char[] ,但这就是全部。

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

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

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