我有java长度为10的字符串。现在我想将它减少到5的lenthg。我可以像C中那样做,如下所示
str[6] = '\0' ; //insert null at 6th place so remaining string is ignored.
我不想使用java的内置API来做这个。我想要解决的主要问题是我想删除字符串中的重复字符。现在删除重复的字符后字符串大小减少所以我想删除剩余的5字符。
答案 0 :(得分:4)
Strings
是不可变的,因此您不能修改字符串但必须创建一个新字符串。由于您无法理解char[]
的基础String
,实现目标的唯一方法是使用API方法:
String s = "blah blah blah";
s = s.substring(0, 5);
答案 1 :(得分:2)
答案 2 :(得分:2)
我想知道为什么这被标记为“面试问题”?
无论如何,如果我在接受采访时被问到这个问题,我会回答:
字符串是不可变的。
解决方案是使用String.subString(...)
。
暂停,看看面试官是否期待更多......
实际上......如果你真的很绝望,你可以使用反射来改变一个字符串......
但是你真的,真的不想这样做,因为String的char数组可以与其他字符串共享(或者字符串可以被实现),并且更改字符串可能会同时更改其他字符串。
此外,JLS表示通过后门方式更改final
具有不确定的影响;例如 vis-a-vis 内存模型。
答案 3 :(得分:1)
字符串是不可变的,因此当您删除重复字符时,您已经有了一个新字符串。
答案 4 :(得分:1)
//这在java
中或多或少是等价的str = str.substring( 0, 7 );
答案 5 :(得分: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
*/
答案 6 :(得分:0)
您可以实例化一个新的String对象,为您提供字符数组并指定此新String的长度。确实String是不可变的,在修改现有String时会自动完成新实例化。
答案 7 :(得分:0)
为什么不想使用Java API?使用String并使用regex包中的类,您可以完全按照自己的意愿执行操作(删除重复的字符),而无需使用字符数组。
答案 8 :(得分:0)
如果要删除重复的字符,最好创建
StringBuilder sb = new StringBuilder(str);
并使用例如
sb.delete(start, end);
删除字符。
答案 9 :(得分:0)
由于java中的字符串是不可变的,因此最佳解决方案是使用
String.subString()
方法!