2011-12-16 29 views
79

tôi muốn đại diện cho một empty character trong java như "" trong String ...Làm thế nào để đại diện cho char trống trong Java Character lớp

như thế char ch = a empty character;

Thật sự tôi muốn thay thế một nhân vật mà không để lại không gian.

Tôi nghĩ rằng có thể là đủ để hiểu ý nghĩa của điều này: no character not even space.

+3

Ý bạn là gì? –

+2

Hiển thị ví dụ về thao tác thay thế bạn muốn thực hiện. – sudocode

+1

@rahulsri Tôi không thể thấy mã bạn đang đề cập đến. –

Trả lời

0

Bạn chỉ có thể sử dụng lại một ký tự hiện có. ví dụ. \0 Nếu bạn đặt điều này trong một String, bạn sẽ có một String với một ký tự trong đó.


Giả sử bạn muốn có một char như vậy mà khi bạn làm

String s = 
char ch = ? 
String s2 = s + ch; // there is not char which does this. 
assert s.equals(s2); 

những gì bạn phải làm là thay vì

String s = 
char ch = MY_NULL_CHAR; 
String s2 = ch == MY_NULL_CHAR ? s : s + ch; 
assert s.equals(s2); 
+0

@Lawrey tôi đã thử Char ch = '\ 0' nhưng nó không hoạt động .. – rahulsri

+1

Bạn có ý nghĩa gì 'nó không hoạt động'?Bạn có nghĩa là nó không biên dịch? Trong trường hợp đó, nó sẽ là 'char ch = '\ 0';' hoặc 'char ch = 0;' –

+0

@rahulsri Tất cả các ký tự đều là ký tự và không có ký tự nào không phải là ký tự. Bạn cần phải tìm ra yêu cầu thực sự của bạn là gì và cố gắng giải quyết nó theo một cách khác. Nhân vật 'nul' là một trong nhiều nhân vật đặc biệt chỉ ra một nhân vật không thực sự ở đó, nhưng bản thân nó vẫn là một nhân vật. –

91

Bạn có thể gán '\u0000' (hoặc 0). Vì mục đích này, hãy sử dụng Character.MIN_VALUE.

Character ch = Character.MIN_VALUE; 
+4

''\ 0'' có nghĩa là gì? @AVD –

+7

@cinnamontoast - Đó là một [null char literal] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) – adatapost

+8

Một chữ char trống vẫn là một ký tự và chiếm không gian trong bộ nhớ . –

2

Bạn không thể. "" là chữ cho một chuỗi có chứa các ký tự không. Nó không chứa "ký tự trống" (bất kể ý bạn là gì).

25

Như nhân vật là một lớp học bắt nguồn từ đối tượng, bạn có thể gán null như "dụ":

Character myChar = null; 

Vấn đề giải quyết;)

+4

Đây là giải pháp đúng và phải là câu trả lời được chấp nhận. –

+1

Mặc dù điều này không trả lời OP, đó là những gì tôi đang tìm kiếm. –

+1

Câu trả lời đúng nhất của MOST là "không thể thực hiện được". Đây là gần nhất bạn có thể nhận được. – Malnormalulo

10

một chuỗi rỗng là một wrapper trên char[] không có yếu tố này. Bạn có thể có một số trống char[]. Nhưng bạn không thể có "trống" char. Giống như các nguyên thủy khác, char phải có giá trị.

Bạn nói rằng bạn muốn "thay thế một ký tự mà không cần rời khỏi không gian".

Nếu bạn đang xử lý char[], thì bạn sẽ tạo một char[] mới với thành phần đó đã bị xóa.

Nếu bạn đang xử lý String, thì bạn sẽ tạo một String mới (Chuỗi không thay đổi) với ký tự bị xóa.

Dưới đây là một số mẫu về cách bạn có thể loại bỏ một char:

public static void main(String[] args) throws Exception { 

    String s = "abcdefg"; 
    int index = s.indexOf('d'); 

    // delete a char from a char[] 
    char[] array = s.toCharArray(); 
    char[] tmp = new char[array.length-1]; 
    System.arraycopy(array, 0, tmp, 0, index); 
    System.arraycopy(array, index+1, tmp, index, tmp.length-index); 
    System.err.println(new String(tmp)); 

    // delete a char from a String using replace 
    String s1 = s.replace("d", ""); 
    System.err.println(s1); 

    // delete a char from a String using StringBuilder 
    StringBuilder sb = new StringBuilder(s); 
    sb.deleteCharAt(index); 
    s1 = sb.toString(); 
    System.err.println(s1); 

} 
+0

Ngoài thay thế() giải pháp khác hai sẽ thay thế chỉ là sự xuất hiện đầu tiên của nhân vật và không phải tất cả. – sactiw

6

Nếu bạn muốn thay thế một nhân vật trong một String mà không để lại bất kỳ khoảng trống sau đó bạn có thể đạt được điều này bằng cách sử dụng StringBuilder. Chuỗi là đối tượng bất biến trong java, bạn không thể sửa đổi nó.

String str = "Hello"; 
StringBuilder sb = new StringBuilder(str); 
sb.deleteCharAt(1); // to replace e character 
50

char có nghĩa là chính xác một ký tự. Bạn không thể gán 0 ký tự cho loại này.

Điều đó có nghĩa là không có giá trị char mà String.replace(char, char) sẽ trả lại một chuỗi có độ dài khác nhau.

+7

Ba năm sau khi thực tế, một người nào đó cuối cùng đã đưa ra một câu trả lời chính xác và đầy đủ. – Malnormalulo

0

Sử dụng \b điều hành (các nhà điều hành xóa lùi thoát) trong tham số thứ hai

String test= "Anna Banana"; 

System.out.println(test); //returns Anna Banana<br><br> 
System.out.println(test.replaceAll(" ","\b")); //returns AnnaBanana removing all the spaces in the string 
1

đây là cách tôi làm điều đó.

char[] myEmptyCharArray = "".toCharArray(); 
0
char ch = Character.MIN_VALUE; 

Đoạn mã trên sẽ khởi tạo biến ch với giá trị tối thiểu mà một char có thể có (ví dụ: \u0000).

2

Trong java có gì như nhân vật rỗng đen, nói cách khác, '' không có ý nghĩa không giống như "" có nghĩa là một Chuỗi rỗng đen

Gần nhất bạn có thể đi về đại diện cho nhân vật rỗng đen là thông qua số không dài char [], một cái gì đó như:

char[] cArr = {};   // cArr is a zero length array 
char[] cArr = new char[0] // this does the same 

Nếu bạn tham khảo lớp string constructor mặc định của nó tạo ra một chuỗi ký tự trống sử dụng new char[0]

Ngoài ra, bằng cách sử dụng Character.MIN_VALUE là không chính xác bởi vì nó không phải là nhân vật thực sự trống rỗng thay vì giá trị nhỏ nhất của ký tự loại.

Tôi cũng không thích Character c = null; như một giải pháp chủ yếu vì jvm sẽ ném NPE nếu nó cố gắng bỏ hộp nó. Thứ hai, null về cơ bản là một tham chiếu đến không có kiểu tham chiếu w.r.t và ở đây chúng ta đang xử lý kiểu nguyên thủy không chấp nhận null như một giá trị có thể.

Giả sử trong chuỗi, nói str, OP muốn thay thế tất cả các lần xuất hiện của một nhân vật, nói 'x', với nhân vật rỗng '', sau đó hãy thử sử dụng:

str.replace("x", ""); 
2

Như chars có thể được biểu dưới dạng Số nguyên (Mã ASCII), bạn có thể chỉ cần viết:

char c = 0; 

0 bằng mã ASCII là null.

+0

0 là đơn vị mã UTF-16 ('char') là mã hóa UTF-16 hoàn chỉnh cho mã Unicode U + 0000. Bất kỳ sự tương tự nào với một số bộ ký tự khác hoặc mã hóa ký tự là không liên quan. UTF-16 là những gì Java sử dụng. –

0

Xin chào, tôi luôn đưa ra các phương pháp cho các công cụ tùy chỉnh thường không được triển khai trong java. Đây là một phương pháp đơn giản tôi đã thực hiện để loại bỏ nhân vật từ String nhanh

public static String removeChar(String str, char c){ 
     StringBuilder strNew=new StringBuilder(str.length()); 
     char charRead; 
     for(int i=0;i<str.length();i++){ 
      charRead=str.charAt(i); 
      if(charRead!=c) 
       strNew.append(charRead); 
     } 
     return strNew.toString(); 
    } 

Đối explaintion, vâng không có ký tự null để thay thế, nhưng bạn có thể xóa nhân vật như thế này. Tôi biết câu hỏi cũ của nó, nhưng tôi đang đăng câu trả lời này vì mã này có thể hữu ích cho một số người.

Các vấn đề liên quan