繁体   English   中英

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(), delimiterprefixsuffix 尽管没有专门回答您所说的问题,但它可以解决您面临的实际问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM