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)
; 您必须以编程方式确定offset
和count
的适当值。 也许String方法,例如replace
,concat
或substring
可能有所帮助。
首先, String
不是 char[]
。 String
使用 char[]
,但这就是全部。
你建议的是一个特殊字符的自定义解释来标记一个char数组的“使用范围”,如果这是你为你的方法创建的合同,这很好。
所有字符都是java中的“有效”字符,但有正式保证unicode“非字符”永远不会用于编码字符: \uFDD0
到\uFDEF
, \uFFFE
和\uFFFF
。
您可以考虑使用其中一个作为“范围结束”标记字符。