替换字符串中给出的最后一个字符

时间:2014-03-13 20:17:39

标签: java regex string match

我在java中有一个字符串:

String text = "A, B, C, D, ";

我如何才能获得"A, B, C and D"

我也有“A,B,C,D”:text.substring(0,text.lastIndexOf(“,”)),但我如何得到我想要的结果呢?

感谢!!!

6 个答案:

答案 0 :(得分:1)

这样的东西
text = text.replaceAll(", (\\w+), $", " and $1");

replaceAll使用regex作为第一个参数,可以通过$x替换此正则表达式匹配的部分,其中x表示与group数字匹配的部分x(简而言之,群组是括号中的部分或正则表达式)。

因此,此正则表达式将匹配, oneOrMoreCharacters,,它位于字符串结尾之前,正则表达式可以用$表示。

样本:

System.out.println("A, B, C, D, ".replaceAll(", (\\w+), $", " and $1"));

输出:A, B, C and D


修改

如果您的D部分也可以包含非字母数字字符,则代替\\w使用代表除[^,]之外的所有字符的,。所以试试

text = text.replaceAll(", ([^,]+), $", " and $1");

答案 1 :(得分:0)

"A, B, C, D, ".replace(", D, ", " and D");

答案 2 :(得分:0)

您可以执行以下操作:

  1. 删除最后一个"," 所以你将留下A,B,C,D
  2. 替换最后一个","用"和" 结果是A,B,C和D.
  3. 您可以使用StringBuilder执行此操作:

    String myStr = "A, B, C, D,";
    StringBuilder builder = new StringBuilder(myStr);
    builder.replace(builder.lastIndexOf(","), builder.lastIndexOf(",")+1, "");
    builder.replace(builder.lastIndexOf(","), builder.lastIndexOf(",")+1, " and ");
    String result = builder.toString();
    
    System.out.println(result);//Should print A, B, C and D
    

    我还没有测试过这段代码。但是你明白了。

答案 3 :(得分:0)

String text = "A, B, C, D, ";
String[] split=text.split(",");
String ans="";
for(int i=0;i<split.length;i++){
    if(i==split.length-2){
        ans+= "and "+ split[i].replace(" ","");
        break;
    }
    if(i>0){
      ans+=", ";
    }
    ans+=split[i];
}

System.out.println(ans); // what you wanted

答案 4 :(得分:0)

好像你正在使用像

这样的代码
List<String> list = Arrays.asList("A", "B", "C", "D");
String text = "";
for (String token : list) {
    text += token + ", ";
}
System.out.println(text);

生成text值。

相反,写下第一个值。然后写下除最后一个值之外的所然后使用前缀and写下最后一个值。

List<String> list = Arrays.asList("A", "B", "C", "D");
String text = "";
if (!list.isEmpty()) {
    text += list.get(0);
    for (int i = 1; i < list.size() - 1; i++) {
        text += ", " + list.get(i);
    }
    if (list.size() > 1)
        text += " and " + list.get(list.size() - 1);
}
System.out.println(text);

显然,如果合适,请使用StringBuilder。以上打印

A, B, C and D

这样做的好处在于它适用于任意数量的值,对剩余的长度和标记进行尽可能少的检查。使用单个元素,它将仅打印该值

A

有两个元素(A和B),它会打印

A and B

等等。

答案 5 :(得分:0)

您可以尝试以下内容:

String text = "A, B, C, D, ";
String[] a=text.split(",");
int i=a.length-1;
    while(i>=0 && (a[i]==null || a[i].trim().isEmpty()))
        i--;

System.out.println(a[i]);