输入姓名,程序输出欢迎信息。用 substring() 和 length() 获得名字的子串和长度分别输出姓和名字。

编写程序,允许用户在键盘上输入姓名,程序输出欢迎信息。

程序的运行结果如下:

用不同的输入测试程序,

问题:

  1. 不输入任何字符,直接按ENTER 键会有什么结果。
  2. java.util.Scanner 这个类用于读取从键盘上输入的值,获取从键盘上输入的字符串、整数等分别用什么方法。
  3. 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补充

老师让我们这个实验练习的时候应该是想让我们练习一下字符串的函数。所以我做的时候也没有考虑到复姓的情况。 今天在百度搜索整理了一下,网友提出的大概有以下方法:

  1. 让用户自己分别输入姓和名(最可行的方法)。
  2. 把所有的复姓罗列起来放进个容器(数组)中,即建立完善的复姓字典,然后针对每个姓名比较。
  3. 名字=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();
    }
}

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值