2012-05-10 25 views
6

Ok, więc to pierwszy raz, kiedy tu wysyłam, więc weź mnie ze sobą.Zamiana pozycji elementów w tablicy w java?

Mam nazwę w formacie "Smith, Bob I" i muszę zmienić ten ciąg, aby przeczytać "Bob I. Smith". Wszelkie pomysły, jak to zrobić?

Jest to jeden ze sposobów, w jaki próbowałem, i chociaż wykonuje swoją robotę, wygląda całkiem nieźle.

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 za wysiłek – Venki

+0

Twój algorytm będzie prawdopodobnie zależeć trochę na jakiego rodzaju przepisów dotyczących wprowadzania masz, ponieważ może to wymagać dodatkowych czynności, aby obsłużyć szczególne przypadki lub pozwalają na różnych skrótów, ponieważ dane są spójne. Np: czy zawsze jest obecny środkowy inicjał początkowy, czy też czasem nie będzie tam ani drugie imię, ani pełne drugie imię. A co z tytułami takimi jak II lub Jr? Czy wszystkie imiona mają pierwszą I ostatnią? Itd. –

+0

Dobra, to jest narzędzie, które zbiera nazwy, ponieważ są one dostarczane z niestrukturalnych tekstów lub są zbierane przez skrobanie sieci. Pojawiają się we wszystkich rodzajach formatów, np. "Bob I. Smith", "Smith, Bob I", "Bob Smith", "Smith Bob". Muszę opracować sposób na nadanie wszystkim imionom jednolitego formatu, który na razie jest albo "Pierwszy M. Ostatni", albo "Ostatni, pierwszy M" – Lambda

Odpowiedz

10

Jeśli nazwa jest zawsze <last name>, <firstname>, spróbuj tego:

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

To będzie zbierać Smith w grupie 1 i Bob I. do grupy 2, które następnie są dostępne jako $1 i $2 w ciągu zastępującym. Z powodu grup (.*) w wyrażeniu cały łańcuch pasuje i zostanie całkowicie zastąpiony zamiennikiem, który jest tylko 2 grupami zamienionymi i oddzielonymi znakami spacji.

+0

Wszystko w jednym wierszu. Wspaniały! –

+0

@userunknown o ile mogę powiedzieć z PO, który jest wymagany: 'Smith, Bob I' ->' Bob I. Smith' - chociaż przyznaję, że nie dodałem kropki, ponieważ nie jestem pewien, czy to jest literówka (w kodzie OP kropka jest obecna) lub faktycznie wymaganie - powinno być jednak łatwe do dodania. – Thomas

+0

@userunknown lub masz błąd pikseli: 'I.' + piksel może wyglądać tak: '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

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

+1

@PaulVargas Musisz spojrzeć na instrukcję println jako kod testujący, prawdziwy kod ** zwróci ** ten ciąg. Nie masz nic do zwrócenia w swoim przykładzie. –

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

"Bob I.Smith" to mój wynik. Pusty wygląda źle. –

+0

Wciąż puste przed Bobem, dla mnie. –

+0

Ohh ... przepraszam, teraz jest dobrze. – isvforall

Powiązane problemy