2013-07-23 78 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

您可以考慮使用這些作爲您「的結束範圍」標記性狀。