2012-01-28 48 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