解决方式一:时间复杂度为O(n^2)
解决方式二:时间复杂度为O(n)
代码实现:
package string;
public class SpaceStringReplace2 {
//len为数组大小的总容量
public static void SpaceReplace(String strOld,int len){
char[] chs =new char[len];
char[] ch = strOld.toCharArray();
for (int i = 0; i < ch.length; i++) {
chs[i] = ch[i];
}
int strOldLen = 0;
int blackString = 0;
if(chs==null || len<=0)
{
new NullPointerException();
}
int i=0;
while(chs[i]!=' '){
strOldLen++;
if(chs[i]==' '){
blackString++;
}
i++;
}
//将空格转换成%20字符的长度
int strNewLen = strOldLen + blackString*2;
if(strNewLen>len){
new ArrayIndexOutOfBoundsException();
}
int indexOfOld=strOldLen;//指向' '
int indexOfNew=strNewLen;
while(indexOfOld>0 && indexOfNew>indexOfOld){
if(chs[indexOfOld] == ' '){
chs[indexOfNew--] = '0';
chs[indexOfNew--] = '2';
chs[indexOfNew--] = '%';
}
else{
chs[indexOfNew--] = chs[indexOfOld];
}
--indexOfOld;
}
for (char c : chs) {
if(c==' '){
break;
}
System.out.print(c);
}
System.out.println();
}
public static void main(String[] args) {
//StringBuilder str = new StringBuilder("We are happy.");
long timelast = System.currentTimeMillis();
String str = "We are happy.";
SpaceReplace(str,100);//We%20are%20happy.
long timeafter = System.currentTimeMillis();
System.out.println(timeafter-timelast);
}
}
解决方式三:JDK自带的字符串分割
代码实现:
package string;
public class SpaceStringReplace {
public static String SpaceReplace(String strOld){
String[] split = strOld.split(" ");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < split.length-1; i++) {
stringBuilder.append(split[i]).append("%20");
}
stringBuilder.append(split[split.length-1]);
String strNew = stringBuilder.toString();
return strNew;
}
public static void main(String[] args) {
//StringBuilder str = new StringBuilder("We are happy.");
String str = "We are happy.";
System.out.println(SpaceReplace(str));//We%20are%20happy.
}
}