Java 基础类库之-与用户互动

运行 java程序的参数

我们知道无论任何一个 java 程序想要得到执行,那么必须以某个类的主函数为入口,例如:

public class ArgsTest{
    public static void main(String[] args){
        System.out.println("args 数组的长度是"+args.length);
        for(String arg : args){
            System.out.println(arg);
        }
    }
}           

JVM是怎么处理 args数组参数的?

通过上面的答应结果可以看出 args 是一个长度为0的数组,因为计算机是没有思考能力的,既然用户没有赋值给args[]数组,那么 JVM 也不知道如何 args 数组赋值,所以 JVM 将 args数组设置成一个长度为0的数组.因此默认 args[]数组的长度为0

如果向 args数组添加元素

在运行 一个java程序的时候,我们在终端运行 java ClassName arguments的时候,arguments 就会被 JVM 自动赋值到 args 数组中,当需要想 args[]数组中赋多个值得时候,需要将 arguments 用空格分开,JVM 默认使用空格符作为分隔符. 所以如果参数本身含有空格的时候,需要使用双引号""括起来,例如:
java ArgsTest "java Spring" ,那么程序的输出结果是 :

java Spring

如果运行 java ArgsTest java Spring ,那么输出结果为:

java
Spring

程序的输出长度也分别是1和2

使用 Scanner 获取键盘输入

运行 java 程序传入的参数只能在程序开始之前就设定几个固定的参数.如果我们想要在程序运行时取得输入,那么就需要使用 Scanner 类,我们可以很方便的获取键盘输入,Scanner 类有多个构造器,不同的构造器可以接受文件,输入流,字符串作为数据源,用于从 字符串,文件,输入流中解析数据.Scanner 是一个基于正则表达式的文本扫描器,它可以从文件,输入流和字符串中解析出基本的数据类型和字符串值.

构造方法

  • Scanner(File cource) 构造一个新的 Scanner,它生成的值是从指定的文件扫描的

  • Scanner(InputStream source)构造一个新的 Scanner,它生成的值是从一个指定的输入流中扫描的

  • Scanner (Readable source) 构造一个新的 Scanner ,它生成的值是从一个指定的源中扫描的

  • Scanner(ReadableByteChannel source) 构造一个新的 Scanner ,它生成的值是从一个指定的信道扫描的

  • Scanner(String source)构造一个新的 Scanner,它的值是从一个指定的字符串扫描的

主要方法

  • void close() 关闭此扫描器
  • Pattern delimiter()返回此 Scanner 当前正在用于匹配分隔符的 Pattern
  • String findInLine(Pattern pattern) 试图在忽略分隔符的情况下查找一个指定的模式 pattern
  • int radix() 返回此扫描器默认基数
  • skip(Pattern pattern) 在忽略分隔符的情况下跳过与制定模式匹配的输入信息
  • reset() 重置此扫描器,分隔符也会重置
  • locale()返回当前的语言环境
  • useDelimiter(Pattern pattern) 将此扫描器的分割模式设置为此指定模式
  • Scanner useLocale(Locale locale) 将此扫描器的语言环境设置为指定的语言环境
  • Scanner userRadix(int radix)将此扫描器的默认基数设置为指定基数

在使用 Scanner 的时候,我们最经常实用的还有以下两个方法 hasNextType() Type指的是我们指定的类型(一般是基本数据类型),例如hasNext() ,hasNextByte(),hasNextLine()等,读取一个文件的时候可以使用 hasNextLine() 方法,如果没有制定,则该方法为 hasNext()方法,如果扫描器中存在我们指定的结果,那么返回值为 true.还有一个 nextType(),通过该方法,我们能够获取到输入的值,如果不指定 Type,那么 next()方法返回的值为 String

Scanner为了等待信息的输入,它的读取操作可能被阻塞.如果输入源没有输入结束,Scanner 又读不到更多的输入项时,Scanner 的 hasNext()和 next()方法都有可能阻塞.
String testStr = "1 2 3 4 5 6 \n 7 8 9";
Scanner scanner = new Scanner(testStr);
System.out.println("scanner 的默认分隔符:"+scanner.delimiter());
System.out.println("scanner 的默认 locale :"+scanner.locale());
System.out.println("scanner 的默认 基数 :"+scanner.radix());

    System.out.println("输出扫描器的值:");
    while (scanner.hasNext()) {
        System.out.println(""+scanner.next());
    }

scanner 的默认分隔符:\p{javaWhitespace}+
scanner 的默认 locale :zh_CN
scanner 的默认 基数 :10
输出扫描器的值:
1
2
3

4
5
6
7
8
9

scanner = new Scanner(testStr);
    scanner.useDelimiter("\\n");
    System.out.println("scanner 的默认分隔符:"+scanner.delimiter());
    System.out.println("输出使用分隔符后扫描器的值:");
    while (scanner.hasNext()) {
        System.out.println(""+scanner.next());
    }

scanner 的默认分隔符:\n
输出使用分隔符后扫描器的值:
1 2 3 4 5 6
7 8 9

//      忽略分隔符,使用指定模式
    scanner = new Scanner(testStr);
    scanner.useDelimiter("7");
    System.out.println("scanner 的默认分隔符:"+scanner.delimiter());
    System.out.println("输出忽略分隔符:");
    while (scanner.hasNext()) {
//匹配到结果以后,将当前的结果使用指定的模式进行匹配
// 但第一次匹配结果的时候,匹配结果为 1 2 3 4 5 6 \n ,使用 findLine(pattern)以后,将会按照 pattern 进行匹配,pattern 前的将被丢弃,后的就是 scanner.next()的结果
        System.out.println("-----"+scanner.findInLine("2"));
        System.out.println(""+scanner.next());

    }
    scanner.reset();
    System.out.println("scanner 重置后 的默认分隔符:"+scanner.delimiter());

scanner 的默认分隔符:7
输出忽略分隔符:
-----2
3 4 5 6
-----null
8 9
scanner 重置后 的默认分隔符:\p{javaWhitespace}+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,556评论 18 399
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,342评论 0 10
  • 说起我是怎么学习写作的,那是很久远的事了,但我依然清晰的记得,在这里我不妨告诉大家,希望对大家有所帮助,有所裨益。...
    人生如梦z阅读 775评论 0 5
  • 女孩子要多为自己的下一代着想。 我读书,是希望将来不上当。 这个世界太多污浊, 我不希望将来自己做母亲时 除了打工...
    用余生追赶时光阅读 325评论 0 3