Java中的字符串终止符

String terminator in Java

本文关键字:终止 字符串 Java      更新时间:2023-10-16

我是一名经验丰富的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 ''?
//String str3 = new String(str2), doesn't work

我可以写我自己的C类strlen。然而,我想知道在Java中做这件事的优雅方式是什么。

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

谢谢你的建议!

在Java中,char[]String完全不同。忘记C的关联吧,就你目前而言,它们没有任何联系。(为了完整起见,String对象包含一个代表字符串的final char[](它是而不是null终止),您可以像在示例中那样获得它。在弄清楚区别之前,不要这样做。)您可以调用字符串上的所有方法。但请记住,在Java中,String是不可变的——如果您有一个String,它将始终是相同的。您可以将一个新的String对象分配给一个变量,但旧的字符串不会改变(当然,直到所有引用都消失,并且它得到GC’d)。当尝试获取新字符串时,请记住这一点非常重要,如下所示。一旦确定了字符串的长度,就使用.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);

如果我错了,请纠正我,但看起来你只是想获得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方法

使用javasubstring方法String#substring()

str3 = str.substring(0, 3);

看看,substring(int beginIndex)和substring,int endIndex),这将有所帮助:)

所以在你的函数myFunc(str2); 中,返回你想要打破的位置,比如pos

所以你想写一些类似的东西

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