名称为Initials的Java程序

时间:2014-02-24 13:50:16

标签: java string

我正在编写一个程序,它将给出名称(字符串)用户的首字母作为输入。 我想在编写名称作为算法基础时使用Space function。 例如:

<Firstname><space><Lastname>

在for循环中取一次char并检查其间是否有空格,如果有,则会打印之前的charecter。 有人能告诉我如何实现这个吗? 我正在尝试这个,但得到一个错误。

任何帮助都是非常有用的.. P.S-我是java的新手并且发现它非常有趣。对不起,如果编码中有一个大错误

public class Initials {
    public static void main(String[] args) {
        String name = new String();
        System.out.println("Enter your name: ");
        Scanner input = new Scanner(System.in);
        name = input.nextLine();

        System.out.println("You entered : " + name);
        String temp = new String(name.toUpperCase());

        System.out.println(temp);

        char c = name.charAt(0);
        System.out.println(c);

        for (int i = 1; i < name.length(); i++) {
            char c = name.charAt(i);

            if (c == '') {
                System.out.println(name.charAt(i - 1));
            }

        }
    }
}

修改: 好的,终于明白了。该算法很模糊,但它的工作,并将尝试下次使用Substring ..

for (int i = 1; i < temp.length(); i++) {
    char c1 = temp.charAt(i);

    if (c1 == ' ') {
        System.out.print(temp.charAt(i + 1));
        System.out.print(".");
    }
}

非常感谢你们:)

5 个答案:

答案 0 :(得分:4)

这对我有用

public static void main(String[] args) {
    Pattern p = Pattern.compile("((^| )[A-Za-z])");
    Matcher m = p.matcher("Some Persons Name");
    String initials = "";
    while (m.find()) {
        initials += m.group().trim();
    }
    System.out.println(initials.toUpperCase());
}

<强>输出:

run:
SPN
BUILD SUCCESSFUL (total time: 0 seconds)

答案 1 :(得分:2)

只需使用正则表达式:

  1. 仅保留跟随空格的字符
  2. 删除所有剩余的空格,最后
  3. 使其成为大写:
  4. " Foo Bar moo ".replaceAll("([^\\s])[^\\s]+", "$1").replaceAll("\\s", "").toUpperCase();

    =&GT; FBM

答案 2 :(得分:0)

我会做这样的事情: 请记住,您只需要内在字符

public staticvoid main (String[] args){
   String name;
   System.out.println("Enter your complete name");
   Scanner input = new Scanner(System.in);
   name = input.nextLine();
   System.out.println("Your name is: "+name);
   name=" "+name;
   //spacebar before string starts to check the initials
   String ini; 
   // we use ini to return the output
   for (int i=0; i<name.length(); i++){
      // sorry about the 3x&&, dont remember the use of trim, but you
      // can check " your name complete" if " y"==true y is what you want
      if (name.charAt(i)==" " && i+1 < name.length() && name.charAt(i+1)!=" "){
         //if i+1==name.length() you will have an indexboundofexception
         //add the initials
         ini+=name.charAt(i+1);
      }
   }
   //after getting "ync" => return "YNC"
   return ini.toUpperCase();
}

答案 3 :(得分:0)

如果您关心性能(将多次运行此方法),则不需要额外的char(i + 1)并且成本相对较高。 此外,它会在具有双倍空格的文本上中断,而会在以空格结尾的名称上崩溃。

这是一个更安全,更快速的版本:

public String getInitials(String name) {
        StringBuilder initials = new StringBuilder();
        boolean addNext = true;
        if (name != null) {
            for (int i = 0; i < name.length(); i++) {
                char c = name.charAt(i);
                if (c == ' ' || c == '-' || c == '.') {
                    addNext = true;
                } else if (addNext) {
                    initials.append(c);
                    addNext = false;
                }
            }
        }
        return initials.toString();
    }

答案 4 :(得分:0)

public String getInitials() {
          String initials="";
          String[] parts = getFullName().split(" ");
          char initial;
          for (int i=0; i<parts.length; i++){
              initial=parts[i].charAt(0);
              initials+=initial;                  
           }      
          return(initials.toUpperCase());
 }