我有發言權長度爲10的Java字符串。現在我想將其降低到5。是那裏的lenthg我能夠做到像我們用C做如下圖所示修剪字符串
str[6] = '\0' ; //insert null at 6th place so remaining string is ignored.
我不想使用java的內置API來做到這一點。我想解決的主要問題是我想刪除字符串中的重複字符。現在刪除重複的字符後,字符串大小減少了,所以我想刪除剩餘的5個字符。
我有發言權長度爲10的Java字符串。現在我想將其降低到5。是那裏的lenthg我能夠做到像我們用C做如下圖所示修剪字符串
str[6] = '\0' ; //insert null at 6th place so remaining string is ignored.
我不想使用java的內置API來做到這一點。我想解決的主要問題是我想刪除字符串中的重複字符。現在刪除重複的字符後,字符串大小減少了,所以我想刪除剩餘的5個字符。
Strings
在Java中是不可變的,因此您不能修改字符串,但必須創建一個新字符串。正如你不能String
的基本char[]
得到你的手指或者,只有這樣,才能實現自己的目標是使用API方法:
String s = "blah blah blah";
s = s.substring(0, 5);
通常,String的實現將存儲'char []',該字符串的第一個字符的開始索引以及該字符串的'char'的數目。這樣,派生子字符串可以簡單地引用相同的'char []',這有助於最大限度地減少來自表示相同序列的'char'數組的浪費空間量。因此,如果經常調用'substring',不要擔心'char'數組的新分配,因爲子字符串(可能)會使用與原始String相同的'char []'。 – 2011-05-06 10:08:01
如果使用當前的Java版本,請查看StringBuilder:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html – rurouni 2011-05-06 10:08:39
字符串是不可改變的,所以當你刪除重複的字符時,你已經有了一個新的字符串。
你可以使用子串來切斷你需要的部分。
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
*/
您可以實例化一個新的String對象,給出您的字符數組並指定此新String的長度。實際上,字符串是不可變的,當修改現有的字符串時,會自動完成新實例的實例化。
//這將是或多或少相當於在Java中
str = str.substring(0, 7);
爲什麼你不希望使用Java API?通過使用String和正則表達式包中的類的使用,您可以完全按照您的需要(刪除重複字符),而不會混淆字符數組。
如果你想刪除重複的字符,這可能是最好創建
StringBuilder sb = new StringBuilder(str);
和例如使用
sb.delete(start, end);
刪除字符。
我想知道爲什麼這被標記爲「面試問題」?
無論如何,如果有人問我這個在接受採訪時我會回答:
字符串是不可改變的。
解決方法是使用String.subString(...)
。
暫停,看看面試官期待更多...
其實......如果你真的絕望了,你可以使用反射改變字符串...。
但是你真的不想這麼做,因爲String的char數組可以與其他字符串共享(或者字符串可以被實現),並且改變你的字符串可以同時改變其他字符串。
此外,JLS表示,通過後門方式更改final
意味着不確定的影響;例如相對於的存儲器模型。
作爲字符串在Java是不可變的,最好的辦法是使用
String.subString()
方法!
你不想使用str.substring(0,6)的原因是什麼? – rurouni 2011-05-06 10:00:43
這是什麼標記與面試問題? – 2011-05-06 10:03:35