2012-05-10 26 views
6

Ok, quindi è la prima volta che pubblico qui, quindi abbi pazienza con me.Scambiare la posizione degli elementi all'interno di un array in java?

Ho un nome nel formato "Smith, Bob I" e ho bisogno di cambiare questa stringa per leggere "Bob I. Smith". Qualche idea su come fare per farlo?

Questo è un modo che ho provato, e mentre ha fatto il lavoro, sembra piuttosto sciatto.

public static void main(String[] args) { 
     String s = "Smith, Bob I.", r = ""; 
     String[] names; 

     for(int i =0; i < s.length(); i++){ 
      if(s.indexOf(',') != -1){ 
       if(s.charAt(i) != ',') 
        r += s.charAt(i); 
      } 

     } 
     names = r.split(" "); 
     for(int i = 0; i < names.length; i++){ 
     } 
     System.out.println(names[1] +" " + names[2] + " " + names[0]); 


    } 
+1

+1 per lo sforzo – Venki

+0

vostro algoritmo probabilmente dipenderà un po 'che tipo di regole su ingresso si ha, in quanto ciò potrebbe richiedere ulteriori operazioni per gestire casi particolari o consentire di vari tasti di scelta rapida, perché i dati sono coerenti. Ad esempio: c'è sempre un presente iniziale medio o talvolta non ci sarà un secondo nome o un secondo nome completo. Che dire di titoli come II o Jr? Tutti i nomi hanno il primo e l'ultimo? Etc. –

+0

Ok, questo è uno strumento che raccoglie i nomi quando vengono importati da entrambi i testi non strutturati o vengono raccolti raschiando il web. Entrano in tutti i tipi di formati, ad esempio "Bob I. Smith", "Smith, Bob I", "Bob Smith", "Smith Bob". Devo sviluppare un modo per rendere tutti i nomi un formato uniforme, che, per ora, è o "Primo M. Ultimo" o "Ultimo, Primo M" – Lambda

risposta

10

Se il nome è sempre <last name>, <firstname>, provate questo:

String name = "Smith, Bob I.".replaceAll("(.*),\\s+(.*)", "$2 $1"); 

Questo raccoglierà Smith nel gruppo 1 e Bob I. nel gruppo 2, che poi si accede come $1 e $2 nella stringa di sostituzione. A causa dei gruppi (.*) nell'espressione, l'intera stringa corrisponde e sarà completamente sostituita dalla sostituzione, che è solo i 2 gruppi scambiati e separati da un carattere di spazio.

+0

Tutto in un'unica riga. Grande! –

+0

@userunknown per quanto posso dire dall'OP che è un requisito: 'Smith, Bob I' ->' Bob I. Smith' - anche se ammetto che non ho aggiunto il punto, dato che non sono sicuro che sia un errore di battitura (nel codice OP il punto è presente) o in realtà un requisito - dovrebbe essere facile da aggiungere però. – Thomas

+0

@userunknown o si ha un errore pixel: "Io" + l'errore del pixel potrebbe essere simile a 'I,': P – Thomas

5
String[] names = "Smith, Bob I.".split("[, ]+"); 
    System.out.println(names[1] + " " + names[2] + " " + names[0]); 
4
final String[] s = "Smith, Bob I.".split(","); 
System.out.println(String.format("%s %s", s[1].trim(), s[0])); 
+0

Oppure 'System.out.printf ("% s% s% n ", s [1] .trim(), s [0])); ' –

+1

@PaulVargas Si deve guardare l'istruzione println come codice di test, il codice reale ** restituirà ** quella stringa. Non hai nulla da restituire nel tuo esempio. –

3
String s = "Smith, Bob I."; 
String result = s.substring(s.indexOf(" ")).trim() + " " 
      + s.substring(0, s.indexOf(",")); 
+0

"Bob I.Smith" è il mio risultato. Il bianco sembra fuori posto. –

+0

Ancora un vuoto davanti a Bob, per me. –

+0

Ohh ... scusate, ora funziona bene. – isvforall