编写程序,允许用户在键盘上输入姓名,程序输出欢迎信息。
程序的运行结果如下:
用不同的输入测试程序,
问题:
- 不输入任何字符,直接按ENTER 键会有什么结果。
- java.util.Scanner, 这个类用于读取从键盘上输入的值,获取从键盘上输入的字符串、整数等分别用什么方法。
- String取得长度的方法,取得子串的方法。
代码:
import java.util.Scanner;
public class Print_name {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = scan.next();
System.out.println("你好,"+name+"!");
System.out.println("你姓:"+name.substring(0,1)+"!");
System.out.println("你的名字:"+name.substring(1,name.length())+"!");
}
}
name.substring(0,1) 表示截取name变量的字符串,从0开始截取一个作为子串。
name.length() 表示获取name变量这个字符串的长度。
2018.12.5补充
老师让我们这个实验练习的时候应该是想让我们练习一下字符串的函数。所以我做的时候也没有考虑到复姓的情况。 今天在百度搜索整理了一下,网友提出的大概有以下方法:
- 让用户自己分别输入姓和名(最可行的方法)。
- 把所有的复姓罗列起来放进个容器(数组)中,即建立完善的复姓字典,然后针对每个姓名比较。
- 名字=2 的肯定为单姓,>=4的也肯定为复姓。为3的就难区分了。
其实无论是第二种方法和第三种方法都是会有遗漏的,如父亲的姓和母亲的姓组合成的复姓,如4个字的姓(爱新觉罗),如金城武其实姓金城而不是姓金。
接下来提供一个复姓数组字典的方法,转自https://blog.csdn.net/CodingMouse/article/details/2478867,只能说考虑到了我们平时见得多的复姓。
import java.util.Scanner;
public class InputAndOutputName {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//保存我国现存的81个复姓(如果还有人是其他复姓,我估计这人是刚出土的)
String[] RepeatedFamilyName = new String[] {
"欧阳", "太史", "端木", "上官", "司马", "东方", "独孤", "南宫", "万俟", "闻人", "夏侯",
"诸葛", "尉迟", "公羊", "赫连", "澹台", "皇甫", "宗政", "濮阳", "公冶", "太叔", "申屠",
"公孙", "慕容", "仲孙", "钟离", "长孙", "宇文", "司徒", "鲜于", "司空", "闾丘", "子车",
"亓官", "司寇", "巫马", "公西", "颛孙", "壤驷", "公良", "漆雕", "乐正", "宰父", "谷梁",
"拓跋", "夹谷", "轩辕", "令狐", "段干", "百里", "呼延", "东郭", "南门", "羊舌", "微生",
"公户", "公玉", "公仪", "梁丘", "公仲", "公上", "公门", "公山", "公坚", "左丘", "公伯",
"西门", "公祖", "第五", "公乘", "贯丘", "公皙", "南荣", "东里", "东宫", "仲长", "子书",
"子桑", "即墨", "达奚", "褚师"
};
//System.out.println("我国现存复姓数量为:" + RepeatedFamilyName.length + "个。");
//保存全名
String fullName;
//保存姓氏
String familyName = "";
//保存名字
String firstName = "";
//循环标识
boolean con;
do {
con = false;
//控制台输入提示
System.out.print("输入任意一个姓名:");
//接收并保存全名
fullName = sc.next();
//保存输入内容的前两个字符
String frontTwoChar = fullName.substring(0, 2);
//处理复姓
for (int i = 0; i < RepeatedFamilyName.length; i++) {
if (RepeatedFamilyName[i].equals(frontTwoChar)) {
if ((fullName.length() <= 2) && //姓氏不为“欧阳”,且完整姓名小于等于两个字符的
!frontTwoChar.equals("欧阳")) {
System.out.println("错误,请输入完整姓名!");
con = true;
} else if ((fullName.length() > 2) && //姓氏不为“欧阳”,且完整姓名大于两个字符的
!frontTwoChar.equals("欧阳")) {
familyName = fullName.substring(0, 2);
firstName = fullName.substring(2);
} else if ((fullName.length() <= 2) && //姓氏是“欧阳”,且完整姓名小于等于两个字符的
frontTwoChar.equals("欧阳")) {
familyName = fullName.substring(0, 1);
firstName = fullName.substring(1);
} else if ((fullName.length() > 2) && //姓氏是“欧阳”,且完整姓名大于两个字符的
frontTwoChar.equals("欧阳")) {
familyName = fullName.substring(0, 2);
firstName = fullName.substring(2);
}
//找到相匹配的复姓就跳出循环,停止判断
break;
} else {
familyName = fullName.substring(0, 1);
firstName = fullName.substring(1);
}
}
//控制台分别输出姓和名
System.out.println("姓氏:" + familyName);
System.out.println("名字:" + firstName);
//询问用户是否中止程序
System.out.print("是否继续(y/n)?");
char choose = sc.next().charAt(0);
if ((choose == 'y') || (choose == 'Y')) {
con = true;
}
} while (con);
//退出
System.exit(0);
sc.close();
}
}