2012-05-10 70 views
6

好的,所以這是我第一次在這裏發佈,所以請耐心等待。在java中交換數組中元素的位置?

我有一個格式爲"Smith, Bob I"的名稱,我需要將此字符串切換爲"Bob I. Smith"。有關如何去做這件事的任何想法?

這是我嘗試過的一種方式,儘管它完成了工作,但看起來很sl。。

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的努力 – Venki

+0

你的算法可能會取決於什麼樣的你有輸入規則一點,因爲這可能需要額外的步驟來處理特殊情況或允許各種快捷方式,因爲數據是一致的。例如:是否總是存在一箇中間名首字母,否則有時候不會有中間名或全名。那麼像II或Jr這樣的標題呢?所有的名字都有第一個和最後一個?等等 –

+0

好吧,這是一個收集名稱的工具,它們是從非結構化文本中引入的,或者是通過抓取網絡收集的。他們以各種形式出現,即「鮑勃一史密斯」,「史密斯,鮑勃一世」,「鮑勃史密斯」,「史密斯鮑勃」。我需要開發一種方法,使所有名稱成爲一種統一的格式,目前它可以是'First M. Last'或'Last,First M' – Lambda

回答

10

如果名稱是始終<last name>, <firstname>,試試這個:

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

這將收集Smith成組1和Bob I.成2組,然後作爲$1和訪問$2替換字符串中。由於表達式中的(.*)組整個字符串匹配,並且將被替換完全替換,這只是2個組交換並由空格字符分隔。

+0

全部在一行中。大! –

+0

@userunknown據我可以告訴OP是一個要求:'史密斯,鮑勃我' - >'鮑勃一史密斯' - 雖然我承認我沒有添加點,因爲我不確定這是否一個錯字(在OP的代碼中出現點)或實際上是一個要求 - 應該很容易添加。 – Thomas

+0

@userunknown或者你有一個像素的錯誤:'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

或'System.out.printf(「%s%s%n」,s [1] .trim(),s [0])); ' –

+1

@PaulVargas你必須看的println語句作爲測試代碼,真正的代碼將返回** **該字符串。您的示例中沒有任何內容可以返回。 –

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

「Bob I.Smith」是我的結果。空白看起來錯了。 –

+0

對我來說,Bob仍然是一片空白。 –

+0

哦......對不起,現在這是很好的作品。 – isvforall