【问题标题】:Replacing last character given in a string替换字符串中给定的最后一个字符
【发布时间】:2014-03-13 20:17:38
【问题描述】:

我在java中有一个字符串:

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

我怎样才能得到"A, B, C and D"

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

谢谢!!!

【问题讨论】:

  • How do I can to get 让我发笑。这是 String 文字吗?或者你是从一些Iterable 生成String
  • 我的字符串很复杂,但这是我的想法。

标签: java regex string match


【解决方案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");

【讨论】:

  • 你的代码在这个例子中工作,但是当元素包含空格时这不起作用,例如:“第一个词,第二个词,另一个词,等等,”..replaceAll(", (\\w+ )、$"、" 和 $1") 给出相同的输入。感谢您的回复。
  • @victorpacheco3107 你能测试我更新的答案吗?
  • @victorpacheco3107 很高兴你喜欢 :)
【解决方案2】:
"A, B, C, D, ".replace(", D, ", " and D");

【讨论】:

  • 字符串是dinamyc :/
【解决方案3】:
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

【讨论】:

  • 由于 OP 声称 D 下的实际值甚至可以用空格分隔,因此此解决方案将生成 A, B, Cand word1word2word3 以作为 "A, B, C, word1 word2 word3, " 的输入。
  • 这段代码没有被空格分割。在编写 cmets 之前阅读答案。
【解决方案4】:

您可以尝试以下方法:

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]);

【讨论】:

    【解决方案5】:

    您可以执行以下操作:

    1. 删除最后一个“,” 所以你将剩下 A、B、C、D
    2. 将最后一个 "," 替换为 " 和 " 结果是 A、B、C 和 D。

    您可以使用 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
    

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

    【讨论】:

    • 如何替换最后一个","?
    【解决方案6】:

    看来你正在使用类似的代码

    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
    

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2023-04-05
      相关资源
      最近更新 更多