[英]What does str[newLength] = '\0' mean?
我有一個問題,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);
}
C 編程語言的標准庫通常使用以NUL 結尾的字符串。 以 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 不同的是,您通常不必就地修改內容,而是可以自由地創建新副本,因為 Java 具有自動垃圾收集功能,可以清除代碼不再使用的對象和數組。
Java 更經常地使用StringBuilder
類來構造一個字符串,然后再從中生成一個不可變的String
。 因此,慣用的 Java 解決方案將創建一個空的StringBuilder
,遍歷現有String
字符,為每個空格字符append("%20")
,否則append
相同的字符,最后將StringBuilder
實例轉換為String
.
Java 既不是 C 也不是 C++; Java 不使用 '\\0' 字符來指示字符串的結束(實際上在 C 和 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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.