Java str[newLength]=&x27\0';什么意思?

Java str[newLength]=&x27\0';什么意思?,java,string,Java,String,我有一个问题,str[newLength]='\0'是什么意思?因为我认为最后一个字符应该是str[newLength-1],所以我不知道这行的意思 编写一个方法,用“%20”替换字符串中的所有空格。假设字符串的末尾有足够的空间来容纳额外的字符,并且给定了字符串的真实长度。我使用了books代码,使用字符数组在Java中实现了解决方案(考虑到Java字符串是不可变的): 公共类测试{ 公共void ReplaseSpace(char[]str,int-length){ int spaceCoun

我有一个问题,str[newLength]='\0'是什么意思?因为我认为最后一个字符应该是str[newLength-1],所以我不知道这行的意思

编写一个方法,用“%20”替换字符串中的所有空格。假设字符串的末尾有足够的空间来容纳额外的字符,并且给定了字符串的真实长度。我使用了books代码,使用字符数组在Java中实现了解决方案(考虑到Java字符串是不可变的):

公共类测试{
公共void ReplaseSpace(char[]str,int-length){
int spaceCount=0,newLength=0,i=0;
对于(i=0;i=0;i--){
如果(str[i]=''){
str[newLength-1]=“0”;
str[newLength-2]=“2”;
str[newLength-3]='%';
newLength=newLength-3;
}
否则{
str[newLength-1]=str[i];
newLength=newLength-1;
}
}
系统输出打印项次(str);
}

> p> java不是C或C++,java不使用“0”字符来指示字符串的结尾(实际上是C++和C++中的char数组的结尾).Java为数组保留一个“长度”字段,以便它可以在后台执行绑定检查。

C编程语言的标准库通常使用。以NUL结尾的字符串存储在数组中,字符串本身由数组中第一个
'\0'
字符(在ASCII中称为NUL)之前的所有字符组成。例如,如果字符数组的元素是
{'H','e','l','l','o','0','i','d','1','0','t'}
,则字符串是
“Hello”
,忽略NUL之后的所有内容。如果将
'\0'
写入NUL终止字符串的位置n,则将删除前n个字符之后的所有内容,从而将字符串长度减少到不超过n。写入
str[newLength-1]
等内容时,会在NUL之前写入字符

我注意到您使用的是Java编程语言,您可能正试图将书中的C代码逐字翻译成Java。与C不同,Java通常不使用以NUL结尾的字符串,除非在像JNI这样的高级应用程序中,Java代码必须与C代码对话。与C不同,您通常不需要在适当的位置修改代码,但可以改为使用以NUL结尾的字符串自由创建新副本,因为Java具有自动垃圾收集功能,可以清除代码不再使用的对象和数组

Java更经常使用在生成不可变的
字符串之前构造字符串。因此惯用的Java解决方案将在现有的
字符串中创建空的
StringBuilder
追加(“%20”)
对于作为空格的每个字符,或
附加相同的字符,否则,最后将
StringBuilder
实例转换为
String

公共类StringURLify{
public class StringURLify {

    public static void URLify(String s) {
        char[] c = s.toCharArray();
        int length = s.length();
        int spaceCount = 0, newLength = 0;
        for(int i=0;i<= c.length-1;i++) {
            if(c[i] == ' ') {
                spaceCount++;
            }
        }

        newLength = length + (spaceCount * 2);
        char[] c1 = new char[newLength];

        for(int i=length-1;i>=0;i--) {
            if(c[i] == ' ') {
                c1[newLength - 1] = '0';
                c1[newLength - 2] = '2';
                c1[newLength - 3] = '%';
                newLength = newLength-3;
            } else {
                c1[newLength-1] = c[i];
                newLength = newLength-1;
            }
        }


        System.out.println("URLified string : " + String.valueOf(c1));
    }

    public static void main(String[] args) {
        URLify("the dog left");
    }
}
公共静态void URLify(字符串s){ char[]c=s.toCharArray(); int length=s.length(); int spaceCount=0,newLength=0; 对于(int i=0;i=0;i--){ 如果(c[i]==''){ c1[newLength-1]=“0”; c1[newLength-2]=“2”; c1[newLength-3]='%'; newLength=newLength-3; }否则{ c1[newLength-1]=c[i]; newLength=newLength-1; } } System.out.println(“URL化字符串:+string.valueOf(c1)); } 公共静态void main(字符串[]args){ URLify(“狗走了”); } }
不要这样做…您应该使用
urlcoder
来。urlcoder不是将空格转换为加号吗?该语句将存储一个“null”
str
数组中由
newLength
索引的元素处的字符。这实际上是null,用于终止
str
数组中包含的C样式字符串。这意味着由编写代码的人决定——这不是标准的Java习惯用法。
public class StringURLify {

    public static void URLify(String s) {
        char[] c = s.toCharArray();
        int length = s.length();
        int spaceCount = 0, newLength = 0;
        for(int i=0;i<= c.length-1;i++) {
            if(c[i] == ' ') {
                spaceCount++;
            }
        }

        newLength = length + (spaceCount * 2);
        char[] c1 = new char[newLength];

        for(int i=length-1;i>=0;i--) {
            if(c[i] == ' ') {
                c1[newLength - 1] = '0';
                c1[newLength - 2] = '2';
                c1[newLength - 3] = '%';
                newLength = newLength-3;
            } else {
                c1[newLength-1] = c[i];
                newLength = newLength-1;
            }
        }


        System.out.println("URLified string : " + String.valueOf(c1));
    }

    public static void main(String[] args) {
        URLify("the dog left");
    }
}