我正在编写一个程序,它将给出名称(字符串)用户的首字母作为输入。
我想在编写名称作为算法基础时使用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(".");
}
}
非常感谢你们:)
答案 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)
只需使用正则表达式:
" 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());
}