我是一位经验丰富的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 []的方法可能有substr
或strlen
。
感谢您的任何建议!
答案 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);