2013-08-07 311 views
7

我有不同类型的名称。像Java删除最后一个字符串

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); 
+0

那么你的尝试有什么问题?它输出什么? –

+0

为什么你不分裂','?然后,阵列中的每个成员都将是全名。只需按照你想要的方式追加所有这些,最后一个追加一个&。或者你可以用''和' – Loki

回答

22

试图为什么过度复杂化呢?您可以使用String#lastIndexOf搜索的,的最后一个索引,然后使用StringBuilder#replace

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

写一个程序替换最后的','',''和'',你发布了一个很好的答案:) upvote from me –

+0

感谢您的回答。 – user2579475

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

你必须使用正则表达式?

什么:

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

+0

我猜@Maroun Maroun先到了那里,可能StringBuilder更有效率...... – Elist

+0

字符串上的''''会在引擎盖下使用'StringBuilder',所以我不知道效率会有多大的差异如果有的话。 –

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 
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这样的正则表达式只有matc一次。

相关问题