2012-01-28 53 views
2

我剛開始學習Java和我無法格式化字符串。在問題中,我有一個用戶輸入的字符串,它是一個名稱,格式爲:「First First Last」。我需要輸出格式爲「Last,First MI」的字符串(MI爲中間初始值)。需要幫助格式化字符串在Java中

這裏是我到目前爲止,我有名字的工作,但不知道該如何去獲得最後和中間初始出字符串的。

// Variable declarations 
String name, first, last, middle; 
Scanner scan = new Scanner (System.in); 

// Get name from user in format "First Middle Last" 
System.out.println("Enter the person's name: "); 
name = scan.nextLine(); 

// Get first, middle initial, and last name from the string 
first = name.substring(0, name.indexOf(" ")); 
middle = 
last = 


// Output formatted name as "Last, First MI." 
System.out.println(last + ", " + first + " " + middle + "."); 

因此,例如,如果用戶輸入「約翰·羅伯特·多伊」,它會輸出「李四,約翰R.」

任何幫助表示讚賞。

+0

如果這是家庭作業,請將其標記爲這樣 – Robin 2012-01-28 22:50:54

回答

3

您可以使用String類

// Get first, middle initial, and last name from the string 
String nameParts [] = name.split(" "); 
// not sure if you need these variables, but I guess you get the picture 
first = nameParts [0]; 
middle = nameParts [1]; 
last = nameParts [2]; 
middleInital = middle.charAt(0); 

// Output formatted name as "Last, First MI." 
System.out.println(last + ", " + first + " " + middleInital + "."); 
1

看看在String.split方法。這可以讓你找到子字符串。那麼你只需要把它們放在正確的順序

0

看看String splitcharAt String類的方法。

String person_data = "John Robert Doe" ; 
String[] data = person_data.split(" "); 

char MI = data[1].charAt(0); 

System.out.println(data[2] +","+ data[0] + " "+ MI); 

輸出= Doe,John R

這裏

Data[0] == "John" 

Data[1] == "Robert" 

Data[2] == "Doe" 

MI = first character of Data[1] which is R. 
0

的拆分方法試試這個:

String name = "First Middle Last"; 
String[] data = name.split(" "); 
String formatted = String.format("%s, %s %c.", data[2], data[0], data[1].charAt(0)); 

最後一行分配值「Last,First M.」。如預期的那樣變量formatted。此解決方案使用Java的Formatter類,這對您的所有字符串格式需求都有很大的幫助。

0

您需要先拆分(使用String.split),然後格式化字符串。

原諒我,因爲我在我的iPad上打字,答案如下所示:

String names = name.split("\\s+"); \\Split on whitespaces, including tab, newline and carriage return. 
StringBuilder sb = new StringBuilder(); 
for (int x = 0; x < names.length; x++) { 
    switch (x) { 
     case 0: sb.apppend(names[names.length - 1]).append(", "); 
      break; 
     case 1: sb.append(names[0]).append(" "); 
      break; 
     case 2: sb.append(Character.toUpperCase(names[1].charAt(0))).append("."); 
      break; 
     default: break; 
     } 
} 

String fullName = sb.toString(); 
+0

寫這個的什麼一個令人費解的方式。 – 2012-01-28 23:53:13

+0

但它的答案,這將對於喜歡「名姓」更短的投入工作當中的唯一版本) BTW。 StringBuilder的應該用來代替StringBuffer的... – msi 2012-01-29 00:42:35

+0

@Stephen C,我在想未來, 「工程」,笑 – 2012-01-30 07:22:57