str [newLength] ='\ 0'是什么意思?

时间:2014-10-25 02:20:55

标签: java string

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

编写一个方法,用'%20'替换字符串中的所有空格。假设字符串在字符串末尾有足够的空间来容纳其他字符,并且您给出了字符串的真实长度。我使用书籍代码,使用字符数组在Java中实现解决方案(鉴于Java字符串是不可变的):

public class Test {
public void replaseSpaces(char[] str, int length) {
    int spaceCount = 0, newLength = 0, i = 0;

    for(i = 0; i < length; i++) {
        if (str[i] == ' ') 
            spaceCount++;
    }

    newLength = length + (spaceCount * 2);
    str[newLength] = '\0';
    for(i = length - 1; i >= 0; i--) {
        if (str[i] == ' ') {
            str[newLength - 1] = '0';
            str[newLength - 2] = '2';
            str[newLength - 3] = '%';
            newLength = newLength - 3;
        }
        else {
            str[newLength - 1] = str[i];
            newLength = newLength - 1;
        }
    }
    System.out.println(str);
}

3 个答案:

答案 0 :(得分:15)

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

我注意到你正在使用Java编程语言,并且你可能正试图将你的书中的C代码翻译成Java。与C不同,Java通常不使用NUL终止的字符串,除了JNI之类的高级内容,Java代码必须与C代码通信。与C不同,您通常不必修改现有的东西,而是可以自由地创建新的副本,因为Java具有自动垃圾收集功能,可以清除代码不再使用的对象和数组。

Java更经常使用StringBuilder class来构造一个字符串,然后再创建一个不可变的String。因此,惯用Java解决方案会在现有StringBuilderString中为每个字符创建空append("%20")loop through the characters,作为空格或append相同的字符否则,最后将StringBuilder实例转换为String

答案 1 :(得分:5)

Java不是C也不是C ++; Java没有使用&#39; \ 0&#39;字符表示字符串的结尾(&#39;字符数组的结尾&#39;实际上在C和C ++中)。 Java保持一个长度&#39;数组的字段,因此它可以在幕后进行绑定检查。

答案 2 :(得分:0)

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");
    }
}