【问题标题】:need help formatting strings in Java需要帮助在 Java 中格式化字符串
【发布时间】:2012-01-30 15:22:04
【问题描述】:

我刚开始学习 Java,但在格式化字符串时遇到了问题。在问题中,我有一个用户输入的字符串,其名称格式为:“First Middle Last”。我需要以以下格式输出字符串:“Last, First MI.”(MI 是中间首字母)。

这是我目前所拥有的,我的名字可以使用,但不确定如何从字符串中获取最后一个和中间的首字母。

// 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 + ".");

例如,如果用户输入:“John Robert Doe”,它将输出为“Doe, John R.”

感谢任何帮助。

【问题讨论】:

  • 如果这是作业,请标记它

标签: java string


【解决方案1】:

可以使用String类的split方法

// 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 + ".");

【讨论】:

    【解决方案2】:

    看看String.split 方法。这使您可以找到子字符串。然后你只需要按正确的顺序放置它们

    【讨论】:

      【解决方案3】:

      看看String类的String splitcharAt方法。

      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.
      

      【讨论】:

        【解决方案4】:

        试试这个:

        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 类,这对您所有的字符串格式化需求都有很大帮助。

        【讨论】:

          【解决方案5】:

          您需要先拆分字符串(使用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();
          

          【讨论】:

          • 写这个的方式多么复杂。
          • 但它是答案中唯一适用于“姓氏”等较短输入的版本;)顺便说一句。应该使用 StringBuilder 而不是 StringBuffer...
          • @msi,谢谢,改为StringBuilder(尽管StringBuffer 就足够了):-)
          • @msi - 更好的方法是检测输入无效(即不符合指定的输入格式)并抛出异常。 IllegalArgumentException 是个不错的选择。