我在尝试格式化字符串时遇到了一些问题。所以基本上我得到入队和出队,现在工作正常。这是代码:
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,,就是这样。有任何想法吗?提前谢谢。
答案 0 :(得分:3)
改变:
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] + "]");
答案 1 :(得分:1)
怎么样:
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();
答案 2 :(得分:1)
使用string.replaceAll
string.replaceAll(",(?=[^,]*$)", "]");
OR
string.replaceAll("(?m),$", "]");
答案 3 :(得分:1)
public String toString(){
String str = "[";
for(int i = front; i<= rear; i++){
if (i == rear)
str += Q[i] + ",";
else
str += Q[i] + "]";
}
return str;
}
答案 4 :(得分:1)
首先,不要在循环中使用连接+=
for (...){
//...
resultString += newString
//...
}
创建字符串结果。这样,每次执行此代码时,都会创建新的String,需要从resultString
复制值并添加newString
。
而是使用StringBuilder
及其append
方法等适当的工具。这可以防止每次复制先前的结果(可能需要一些时间)并将newString放在更大的缓冲区中。所以让你的代码更像
StringBuilder sb = new StringBuilder();
for (...){
sb.append(newString);
}
String result = sb.toString();
此外,如果您想添加,
之类的分隔符,可以使用new StringJoiner(delimiter)
(在Java 8中添加),或者如果要添加前缀和后缀,如[
和{{1}使用]
。
所以你的代码看起来或多或少像:
new StringJoinder(delimiter, prefix, suffix)
甚至
StringJoiner sj = new StringJoiner(",", "[", "]");
for(int i = front; i<= rear; i++){
sj.add(Q[i]);
}
return sj.toString();
答案 5 :(得分:0)
有新的Java 8风格:
Arrays.stream(Arrays.copyOfRange(Q, front, rear)).collect(Collectors.joining(",", "[", "]");
隐式创建一个StringJoiner,其参数传递给Collectors.joining(), delimiter , prefix , suffix 。 虽然没有具体回答你的问题,但它解决了你所面临的实际问题。