Java如何将字符串的最后一个chatacter替换为特定字符

时间:2015-06-06 11:55:18

标签: java string

我在尝试格式化字符串时遇到了一些问题。所以基本上我得到入队和出队,现在工作正常。这是代码:

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,,就是这样。有任何想法吗?提前谢谢。

6 个答案:

答案 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 。 虽然没有具体回答你的问题,但它解决了你所面临的实际问题。