修剪字符串

时间:2011-05-06 09:55:52

标签: java

我有java长度为10的字符串。现在我想将它减少到5的lenthg。我可以像C中那样做,如下所示

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

我不想使用java的内置API来做这个。我想要解决的主要问题是我想删除字符串中的重复字符。现在删除重复的字符后字符串大小减少所以我想删除剩余的5字符。

10 个答案:

答案 0 :(得分:4)

Java中的

Strings是不可变的,因此您不能修改字符串但必须创建一个新字符串。由于您无法理解char[]的基础String,实现目标的唯一方法是使用API​​方法:

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

答案 1 :(得分:2)

答案 2 :(得分:2)

我想知道为什么这被标记为“面试问题”?

无论如何,如果我在接受采访时被问到这个问题,我会回答:

  1. 字符串是不可变的。

  2. 解决方案是使用String.subString(...)

    暂停,看看面试官是否期待更多......

  3. 实际上......如果你真的很绝望,你可以使用反射来改变一个字符串......

  4. 但是你真的,真的不想这样做,因为String的char数组可以与其他字符串共享(或者字符串可以被实现),并且更改字符串可能会同时更改其他字符串。

  5. 此外,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时会自动完成新实例化。

String API Reference

答案 7 :(得分:0)

为什么不想使用Java API?使用String并使用regex包中的类,您可以完全按照自己的意愿执行操作(删除重复的字符),而无需使用字符数组。

答案 8 :(得分:0)

如果要删除重复的字符,最好创建

StringBuilder sb = new StringBuilder(str);

并使用例如

sb.delete(start, end);

删除字符。

答案 9 :(得分:0)

由于java中的字符串是不可变的,因此最佳解决方案是使用

String.subString()

方法!