2011-05-06 249 views
1

我有發言權長度爲10的Java字符串。現在我想將其降低到5。是那裏的lenthg我能夠做到像我們用C做如下圖所示修剪字符串

str[6] = '\0' ; //insert null at 6th place so remaining string is ignored. 

我不想使用java的內置API來做到這一點。我想解決的主要問題是我想刪除字符串中的重複字符。現在刪除重複的字符後,字符串大小減少了,所以我想刪除剩餘的5個字符。

+2

你不想使用str.substring(0,6)的原因是什麼? – rurouni 2011-05-06 10:00:43

+1

這是什麼標記與面試問題? – 2011-05-06 10:03:35

回答

4

Strings在Java中是不可變的,因此您不能修改字符串,但必須創建一個新字符串。正如你不能String的基本char[]得到你的手指或者,只有這樣,才能實現自己的目標是使用API​​方法:

String s = "blah blah blah"; 
s = s.substring(0, 5); 
+1

通常,String的實現將存儲'char []',該字符串的第一個字符的開始索引以及該字符串的'char'的數目。這樣,派生子字符串可以簡單地引用相同的'char []',這有助於最大限度地減少來自表示相同序列的'char'數組的浪費空間量。因此,如果經常調用'substring',不要擔心'char'數組的新分配,因爲子字符串(可能)會使用與原始String相同的'char []'。 – 2011-05-06 10:08:01

1

字符串是不可改變的,所以當你刪除重複的字符時,你已經有了一個新的字符串。

0

你可以使用子串來切斷你需要的部分。

String name="Hello World"; 

    //This will print the substring starting from index 6   
    System.out.println(name.substring(6)); 

    /* 
    This will print the substring starting from index 0 up to 4 not 5. 
    IMPORTANT: Here startIndex is inclusive while endIndex is exclusive. 
    */ 

    System.out.println(name.substring(0,5)); 
/* 
OUTPUT of the above given Java substring Example would be: 
World 
Hello 
*/ 
0

您可以實例化一個新的String對象,給出您的字符數組並指定此新String的長度。實際上,字符串是不可變的,當修改現有的字符串時,會自動完成新實例的實例化。

String API Reference

1

//這將是或多或少相當於在Java中

str = str.substring(0, 7); 
0

爲什麼你不希望使用Java API?通過使用String和正則表達式包中的類的使用,您可以完全按照您的需要(刪除重複字符),而不會混淆字符數組。

0

如果你想刪除重複的字符,這可能是最好創建

StringBuilder sb = new StringBuilder(str); 

和例如使用

sb.delete(start, end); 

刪除字符。

2

我想知道爲什麼這被標記爲「面試問題」?

無論如何,如果有人問我這個在接受採訪時我會回答:

  1. 字符串是不可改變的。

  2. 解決方法是使用String.subString(...)

    暫停,看看面試官期待更多...

  3. 其實......如果你真的絕望了,你可以使用反射改變字符串...。

  4. 但是你真的不想這麼做,因爲String的char數組可以與其他字符串共享(或者字符串可以被實現),並且改變你的字符串可以同時改變其他字符串。

  5. 此外,JLS表示,通過後門方式更改final意味着不確定的影響;例如相對於的存儲器模型。

0

作爲字符串在Java是不可變的,最好的辦法是使用

String.subString() 

方法!