Java删除最后一个字符串

7

我有不同类型的名称,比如:

ABC BCD, EFG HGF, HGF HJK

我希望用"and"替换最后一个","。因此,格式将变成这样。
ABC BCD, EFG HGF & HGF HJK

我尝试了以下内容

names = "Jon Benda, Jon Wetchler, Thomas Leibig "
StringBuilder sbd = new StringBuilder();
String[] n = getNames.split("\\s+");
System.out.println(n.length);
for (int i = 0; i < n.length; i++) {
    sbd.append(n[i]);
    System.out.print(n[i]);
    if (i < n.length - 3)
        sbd.append(" ");
    else if (i < n.length - 2)
        sbd.append(" & ");
}
System.out.print("\n");
System.out.print(sbd);

你的尝试有什么问题?它输出了什么? - Vincent van der Weele
为什么不把逗号“,”分开呢?这样你数组中的每个成员都将是完整的名字。只需按照您想要的方式附加所有这些内容,对于最后一个,请使用“&”进行附加。或者,您可以用“and”替换最后一个逗号“,”。 - Loki
6个回答

23

为什么要把它搞得这么复杂?你可以使用String#lastIndexOf 搜索最后一个 , 的索引,然后使用StringBuilder#replace

int lastIdx = names.lastIndexOf(",");
names = new StringBuilder(names).replace(lastIdx, lastIdx+1, "and").toString();

3
我已经为此编写了一个程序,与此同时,您发布了一个很棒的答案 :) 我给您点了赞。 - Prasad Kharkar

5
你可以像这样做。
 public static void main(String[] args) {
        String names = "Jon Benda, Jon Wetchler, Thomas Leibig ";
        String newNames = "";
        StringBuilder sbd = new StringBuilder();
        String[] n = names.split(",");
        System.out.println(n.length);
        for (int i = 0; i < n.length; i++) {

            if (i == n.length - 1) {
                newNames = newNames + " and " + n[i];
            } else {
                newNames = newNames + n[i] + " ";
            }
        }
        System.out.println(newNames);
    }

这将输出:

 Jon Benda  Jon Wetchler  and  Thomas Leibig 

4

您必须使用正则表达式吗?

那么,其他选择呢:

int lastIndexOfComa = getNames.lastIndexOf(",");
names = getNames.substring(0, lastIndexOfComa) + " &" + getNames.substring(lastIndexOfComa, getNames.length);

?


我猜@Maroun Maroun已经到达了那里,也许StringBuilder更有效率... - Elist
字符串上的 + 将在底层使用 StringBuilder,因此我不知道是否会有任何效率上的差异,如果有的话。 - Viktor Seifert

3

试试这个

 String name = "ABC BCD, EFG HGF, HGF HJK";
    int index=name.lastIndexOf(",");
    StringBuilder sb=new StringBuilder();
    sb.append(name.substring(0,index));
    sb.append(" and ");
    sb.append(name.substring(index+1,name.length()));
    System.out.println(sb);

0
一句话代码:
name=name.replace(name.substring(name.lastIndexOf(",")),"&"+name.substring(name.lastIndexOf(",")+1))

0

已经有答案了,但这是我的贡献:

String name = "ABC BCD, EFG HGF, HGF HJK";    
name = name.replaceFirst("(.*),", "$1 &")

在这种情况下,使用replaceFirst和replaceAll是相同的,因此正则表达式只匹配一次。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接