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