Java中的字符串终止符

时间:2012-01-16 04:44:21

标签: java c++ arrays string char

我是一位经验丰富的C ++程序员,但是刚接触Java。

我有一个算法可以进行一些字符串操作,我想在中间终止一个字符串。

说,我想做这样的事情

String str("hello, world");
char[] str2 = str.toCharArray(); 
//pass str2 to some function 
myFunc(str2);
...
//inside myFunc, I decide to terminate str2 at position 3, so I did
//str2[3] = 0

//then it returns, how can I construct an String type variable from str2 that includes chars before the '\0'?
//String str3 = new String(str2), doesn't work

我可以写自己喜欢的C strlen。但是,我想知道在Java中使用它的优雅方式是什么。

此外,很难找到有关类型char[]的文档。每当我谷歌,我只能在“char”而不是“char []”上找到文档。我认为char []的方法可能有substrstrlen

感谢您的任何建议!

4 个答案:

答案 0 :(得分:3)

如果我错了,请纠正我,但看起来你只是试图获得String的前三个字符。要做到这一点,你可以这样做:

str.substring(0, 3);

char[]不是它自己的一类。所有数组都有长度,您可以按如下方式检索:

char[] myChars = new Char[5];
return myChars.length; // returns 5

但是,您通常只应处理String个对象,而不是char[]String扩展CharSequence,这是(正如名称所暗示的)一系列char基元,基本上是char[]

tl; dr:只需使用String方法

即可

答案 1 :(得分:3)

在Java中,char[]String完全不同。忘掉C的关联,就你现在所关心的而言,他们没有任何联系。 (为了完整起见,String个对象持有表示字符串的final char[](并且以null结尾),您可以像在示例中那样获得。这样做直到你清楚区别。)你在字符串上调用所有方法。但请记住,在Java中,String是不可变的 - 如果你有一个String,它总是是相同的。您可以将一个新的String对象分配给一个变量,但旧的字符串不会改变(直到所有引用都消失了,当然它会得到GC)。当 尝试获取新字符串时,这一点非常重要。一旦你弄清楚了你想要字符串的时间,就可以使用.substring()

所以你的例子应该是这样的:

// Remember in Java no object is statically allocated.
String str1 = "Hello, World";
int indexToCutAt = myFunc(str1);
// We can't change str1, so we'll need to store the new string.
String str2 = str1.substring(0,indexToCutAt);

答案 2 :(得分:2)

使用java 子串方法String#substring()

str3 = str.substring(0, 3);

答案 3 :(得分:2)

请查看substring(int beginIndex)substring(int beginIndex, int endIndex),这有助于:)

因此,在您的函数myFunc(str2); 中,返回您要打破的位置pos

所以你想写类似

的东西
int pos = myFunc(str2);
String str3 = str2.substring(0,pos);