![](/img/trans.png)
[英]How to replace a string of dots with a character at a specific position in java?
[英]Java how to replace last character of string to specific character
尝试格式化字符串时遇到一些问题。 所以基本上我可以入队和出队,现在工作正常。 这是代码:
public String toString(){
String str = "[";
for(int i = front; i<= rear; i++){
str += Q[i] + ",";
}
if(str.length() > 0 && str.charAt(str.length()-1)==','){
str.substring(0, str.length()-1);
}
return str;
}
我希望结果像[1,2,3,4] 。 但是,我不知道如何将最后一个“,”替换为“]” 。 当前的问题是它返回了我[1,2,3,4,仅此而已。
变化:
for(int i = front; i<= rear; i++){
str += Q[i] + ",";
}
至 :
for(int i = front; i< rear; i++){
str += Q[i] + ",";
}
str+=Q[rear] + "]";
同样,最好使用StringBuilder.append()
代替str +=
,因为String是immutable
并且每次使用str+=
都会创建str
对象的新实例。
使用StringBuilder
它将是:
StringBuilder str = new StringBuilder();
str.append("[");
for(int i = front; i<= rear; i++){
str.append(Q[i] + ",");
}
str.append(Q[rear] + "]");
怎么样 :
String str = "[";
for(int i = front; i< rear; i++){
str += Q[i] + ",";
}
str += Q[rear] + "]";
当然,我将使用StringBuilder代替String concatenation:
StringBuilder str = new StringBuilder(128);
str.append('[');
for(int i = front; i< rear; i++){
str.append(Q[i]);
str.append(',');
}
if (rear > front) {
str.append(Q[rear]);
}
str.append(']');
return str.toString();
使用string.replaceAll
string.replaceAll(",(?=[^,]*$)", "]");
要么
string.replaceAll("(?m),$", "]");
public String toString(){
String str = "[";
for(int i = front; i<= rear; i++){
if (i == rear)
str += Q[i] + ",";
else
str += Q[i] + "]";
}
return str;
}
首先,不要在循环内使用串联+=
for (...){
//...
resultString += newString
//...
}
创建字符串结果。 这个每次执行该代码方式,创造了新的字符串,它需要从复制值resultString
并添加newString
。
而是使用适当的工具,例如StringBuilder
及其append
方法。 这样可以防止每次都复制先前的结果(这可能需要一些时间),并将newString放在更大的缓冲区中。 因此,使您的代码更像
StringBuilder sb = new StringBuilder();
for (...){
sb.append(newString);
}
String result = sb.toString();
同样,如果您想添加定界符,
可以使用new StringJoiner(delimiter)
(Java 8中已添加),或者如果您想添加前缀和后缀,例如[
和]
使用new StringJoinder(delimiter, prefix, suffix)
。
因此您的代码或多或少看起来像:
StringJoiner sj = new StringJoiner(",", "[", "]");
for(int i = front; i<= rear; i++){
sj.add(Q[i]);
}
return sj.toString();
甚至
return IntStream
.rangeClosed(fron, rear)
.mapToObj(i->Q[i])
.collect(Collectors.joining(",", "[", "]"));
有一种新的Java 8 only样式:
Arrays.stream(Arrays.copyOfRange(Q, front, rear)).collect(Collectors.joining(",", "[", "]");
它隐式创建一个StringJoiner,并将参数传递给Collectors.joining(), delimiter , prefix和suffix 。 尽管没有专门回答您所说的问题,但它可以解决您面临的实际问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.