2013-07-23 47 views
2

我解决一个简单的问题:末在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不使用新的阵列

+2

使用StringBuilder类的问题? http://docs.oracle.com/javase/tutorial/java/data/buffers.html。这可能无助于你找出解决上述问题的办法。它提供了一个解决方案。 – CBIII

+0

正如我所说的,我只想操纵数组,而不使用任何额外的数据结构(即''in-place') –

+2

字符串生成器是一个使用字符串操作数组的字符串类。 – CBIII

回答

7

的Java没有“标记”为C是否结束的字符串。它跟踪长度为&的值,因此可以在字符串中包含零字符(\0)。如果从包含\0字符一个字符数组创建String,所得String将包含这些字符。

请注意,数组有一个静态大小 - 它不能被重新调整大小,所以你必须自己跟踪“大小”(String构造函数不会从你的结尾删除不需要的字符char数组)。

考虑使用任一:

  • StringBuilder由克莱德伯德III建议的,或

  • String(char value[], int offset, int count);您必须以编程方式确定offsetcount的适当值。也许字符串的方法,如replaceconcat,或substring可能的帮助。

2

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

你是在暗示什么是特殊字符标记字符数组,这是很好的,如果这就是你正在创建你的方法合同的“使用范围”的定制解释。

所有的人物都是在Java中“有效”的人物,但也有统一的“非字符”被正式保证永远不会被用于编码字符:\uFDD0通过\uFDEF\uFFFE\uFFFF

您可以考虑使用这些作为您“的结束范围”标记性状。