【Java】关于数组/字符串结束符的疑问…… javacharcareerCup 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在Java中新建一个char[1000]的数组,并只往前面10个添加数据,然后length还是1000java中char 型有默认值的,char[1000],系统会默认给1000个char的初始字符在C/C++中英文结束符是\0 或许c++在初始化的时候不给默认值的吧,不懂 有个感觉自己绕不清楚的问题:查了很多资料,知道Java是没有数组/字符串结束符的,自己也写代码试了下,发现确实如此,在Java中新建一个char[1000]的数组,并只往前面10个添加数据,然后length还是1000,(在C/C++中英文结束符是\0,所以会自动判断到length是2【求证实】)证实:没有结束符。这样的话上面这个代码感觉无解了==首先函数中传入了char[]和字符串的长度,然后因为字符串由空格变成了‘%20’,字符串的长度是增加了的,即代码里的newLength长度,但是因为Java里面没有指针,所以newLength没法返回给main函数,所以需要在void main里面自己判断replace后的数组有多长……但是又因为Java没有结束符==没法判断!方法签名改成带有返回值的:private static char[] ReplaceSpace1(char[] str, int length) 因为题目说实际程度给出了,且数组有足够空间,你创建一个新的length长度的char[],然后对传入的char[]进行逐个扫描,并给新char[]赋值,扫描赋值过程中进行替换。现在的写法是for (int i = 0; str[i] != '\0'; i++) ,但是万一字符串中本身就有\0呢?还是说不要考虑这种情况%>_<%不考虑 现在的写法是for (int i = 0; str[i] != '\0'; i++) ,但是万一字符串中本身就有\0呢?还是说不要考虑这种情况%>_<%补充,不用这个循环了,换成这个:for(int i=0; i<length; i++) 如果样例输入中有输入的length你用一个变量a记录转换后的长度初始为length,然后每碰到一个空格,a+2(实际上加长了2位)可以同时写入你的char数组,另外用一个下标,写入char[i]----char[i+2].最后用a的值做循环条件输出。 方法签名没必要带入返回值吧,char[]会直接改变的,类似于C++中的应用?这样设置了返回值效果不还是一样么这里的话,你的意思是处理完操作后,新建一个char[]?因为函数内部知道修改后的char[]长度是newLength,所以新建一个char[]类型,长度就定为newLengh并返回这个char[],这样就解决了这个问题了是吗??但是有2个问题:1、题目要求是In place,所以不可以用额外空间吧,毕竟长度还是和输入的n有关2. 函数返回值为char[],在void main里面要怎么写?难道和string类型一样,直接char[] newCharnewChar = ReplaceSpace1_4(......)这样吗? 如果新建了一个char[]并返回这个char[],这个length是指这个新char[]的length吗?还是什么???好像题目说了you are given the "true" length of the string,假设告诉你长度=。= 这个a 保存到哪呢?a做为一个保存输出长度的变量 不知道你的疑问是?a作为保存输出长度变量的话,这样所有的内容都必须在void main函数中完成吧,Java中没有指针的概念,函数中的参数并不会影响实参的值……把算法单独放在一个method中似乎就无法完成了 楼主,不知道你原始的代码从何而来。反正,Java世界,几乎(如果不是绝对的话)不会有void ReplaceSpace1(char[] str, int length)这样子的方法。甚至很少用字符数组。Java世界,操作的一般都是/** * 对原始字符串进行xxx替换操作。 * @original 原始字符串 * @return 替换后的字符串 */String repaceXxx(String original)是否需要static,看情况 比较字符串头字符的问题。 请教下导出问题 新手,大家帮个忙! volatile 具体是什么意思? 问个问题,关于递增的,帮忙看下吧。^_^ 有个问题关于JSplitPane,想请教各位,希望各位拔刀相助 如何关闭log4j而不用删除代码 如何把一个file写成byte[],然后再把byte[]还原成file? 问几个困饶我很久的包的问题 用JAVA如何控制程序在特定的时间运行? 图形化用户界面 求教:java 的 socket 只能连接一次?
java中char 型有默认值的,char[1000],系统会默认给1000个char的初始字符
在C/C++中英文结束符是\0 或许c++在初始化的时候不给默认值的吧,不懂
证实:没有结束符。这样的话上面这个代码感觉无解了==
首先函数中传入了char[]和字符串的长度,然后因为字符串由空格变成了‘%20’,字符串的长度是增加了的,即代码里的newLength长度,但是因为Java里面没有指针,所以newLength没法返回给main函数,所以需要在void main里面自己判断replace后的数组有多长……但是又因为Java没有结束符==没法判断!
方法签名改成带有返回值的:
private static char[] ReplaceSpace1(char[] str, int length)
因为题目说实际程度给出了,且数组有足够空间,你创建一个新的length长度的char[],然后对传入的char[]进行逐个扫描,并给新char[]赋值,扫描赋值过程中进行替换。
现在的写法是for (int i = 0; str[i] != '\0'; i++) ,但是万一字符串中本身就有\0呢?还是说不要考虑这种情况%>_<%
不考虑
补充,不用这个循环了,换成这个:for(int i=0; i<length; i++)
你用一个变量a记录转换后的长度初始为length,然后每碰到一个空格,a+2(实际上加长了2位)
可以同时写入你的char数组,另外用一个下标,写入char[i]----char[i+2].最后用a的值做循环条件输出。
方法签名没必要带入返回值吧,char[]会直接改变的,类似于C++中的应用?这样设置了返回值效果不还是一样么这里的话,你的意思是处理完操作后,新建一个char[]?因为函数内部知道修改后的char[]长度是newLength,所以新建一个char[]类型,长度就定为newLengh并返回这个char[],这样就解决了这个问题了是吗??
但是有2个问题:
1、题目要求是In place,所以不可以用额外空间吧,毕竟长度还是和输入的n有关
2. 函数返回值为char[],在void main里面要怎么写?难道和string类型一样,直接
char[] newChar
newChar = ReplaceSpace1_4(......)这样吗?
如果新建了一个char[]并返回这个char[],这个length是指这个新char[]的length吗?还是什么???好像题目说了you are given the "true" length of the string,假设告诉你长度=。=
这个a 保存到哪呢?
a做为一个保存输出长度的变量 不知道你的疑问是?a作为保存输出长度变量的话,这样所有的内容都必须在void main函数中完成吧,Java中没有指针的概念,函数中的参数并不会影响实参的值……把算法单独放在一个method中似乎就无法完成了
反正,Java世界,几乎(如果不是绝对的话)不会有void ReplaceSpace1(char[] str, int length)这样子的方法。甚至很少用字符数组。Java世界,操作的一般都是
/**
* 对原始字符串进行xxx替换操作。
* @original 原始字符串
* @return 替换后的字符串
*/
String repaceXxx(String original)
是否需要static,看情况