2013-08-07 2 views
7

Ho diversi tipi di nomi. ComeJava che rimuove l'ultima stringa

ABC BCD, EFG HGF, HGF HJK 

voglio sostituire l'ultimo , con "and". Così, il formato sarà così

ABC BCD, EFG HGF & HGF HJK 

ho provato con questo

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

Quindi cosa c'è che non va nel tuo tentativo? Cosa emette? –

+0

Perché non dividi il ','? Quindi ogni membro dell'array sarà il nome completo. Aggiungete semplicemente tutto ciò che volete e per l'ultimo aggiungetelo con un &. O potresti sostituire l'ultimo ',' con 'e' – Loki

risposta

22

Perché complicare esso? È possibile cercare l'ultimo indice di , utilizzando String#lastIndexOf e quindi utilizzare StringBuilder#replace:

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

ha scritto un programma per questo e nel frattempo hai postato un'ottima risposta :) upvote da me –

+0

Grazie per la tua risposta. – user2579475

3

Prova questa

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

Avete utilizzare RegEx?

Che dire:

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

?

+0

Credo @Maroun Maroun arrivato per primo, e probabilmente StringBuilder è più efficiente ... – Elist

+0

Il '' + sulle stringhe userà un 'StringBuilder' sotto il cofano, in modo da non so wether ci sarà molta differenza in termini di efficienza se del caso. –

5

Si può fare qualcosa di simile.

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

Emette

Jon Benda Jon Wetchler and Thomas Leibig 
0

A uno di linea:

name=name.replace(name.substring(name.lastIndexOf(",")),"&"+name.substring(name.lastIndexOf(",")+1)) 
0

già risposto, ma questo è il mio contributo:

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

In questo caso, è lo stesso uso replaceFirst e replaceAll quindi espressione regolare solo matc h una volta.