`
xlcai
  • 浏览: 19871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Scanner的useDelimiter使用其它字符做为分隔符的详细用法及特别之处

 
阅读更多

由于最近在百度知道上遇到点特殊的问题,研究查阅后了解了些东西,拿出来分享下,这里只针对Scanner的next()说它的分隔符,next()方法

查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext()返回了 true,在等待要扫描的输入时此方法也可能阻塞。

import java.util.Scanner;

public class TestSc {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//sc.useDelimiter("a");
		while (sc.hasNext()) {
			System.out.println("hasNext()判断为true,我还有下一个:");
			System.out.println("下一个输出是:"+sc.next());
		}
	}
}


Scanner默认使用的分隔符是空格、回车和tab,所以我们运行上述代码后输入 a空格b'Tab'c回车 后输出的结果是:

这时我们用useDelimiter改变其分割字符为"a";即将上面的注释代码取消注释。重新运行,这时我们输入a空格b'Tab'c回车后结果是:


这时我们发现虽然hasNext判断为true,但并没有输出next()的值。这里的原因API已经说清楚了,即使以前调用hasNext()返回了true,在等待要扫描的输入时此方法也可能阻塞。此时还在等待输入,并没有扫描到下一个分隔符“a"(换用其它字符后,默认的tab建回车键不再起分隔符的作用,回车键只起了提交的作用)所以并没有输出next()的值,这时我们想输出后面的bc只需要在等待输入的窗口继续输入一个"a"回车,再看:

这时就将两个分隔符a,之间的字符串输出来了。至于后面说我还有下一个,其实是刚才如入的回车。程序还在继续等待扫描输入....

再换一种方式,不用System.in了


直接用字符串,默认空格,回车,tab做分隔符时,输出如此,\n为回车\t为tab,中间的长空格是我直接按的tab键都生效了。

再次将注释去掉结果如下

这时我们发现tab和回车不再当做分隔符,而是被直接输出了,而且e后面没有分隔符“a”还是输出了,因为此时并没有等待扫描输入了。

就是这些,另外如果我们不想严格的使用某个字符,比如有个我们想用yes和回车做分隔符,我们可以用正则表达式,然后我们需要去分割的里面输入并不严格,有时yes前后有一个或多个空格,回车也是有时会空格后再回车,但我们不想要yes和回车前后的空格,而单独的空格没有yes和回车的话我们又要保留,则应该这样写:

import java.util.Scanner;

public class TestSc {
	public static void main(String[] args) {
		Scanner sc = new Scanner("a b	yes      byes c \n  d\te");
		sc.useDelimiter("\\s*yes\\s*|\\s*\n\\s*");
		while (sc.hasNext()) {
			System.out.print("有下一个,");
			System.out.print("下一个输出是:"+sc.next());
		}
	}
}
为了看出效果,我们不再用带回车的输出行System.out.println而是用System.out.print.效果如下:

这里的正则表达式"\\s*yes\\s*|\\s*\n\\s*"解释。\s可以匹配空格、制表符、换页符等空白字符的其中任意一个,用了两个\第一个\的转义字符,第二个是连用的\s。*修饰匹配次数为 0 次或任意次如果想匹配*这个字符的话需要用\*。后面yes不用说,再后面又一个\\s*,表明分割字符为yes,前后可有0个或任意个空格,制表符等。。后面的'|'或的意思,同理表示回车前后可有0或任意个....其中的第一个yes前输入的是tab和后面的\t都被\s匹配掉而没有输出。

Java学习交流群: 2177712

分享到:
评论

相关推荐

    Scanner类的用法

    ### Scanner类的用法 #### 一、简介与基本用法 `Scanner`类是Java SDK 1.5版本引入的新特性,它提供了一种方便的方式来读取基本数据类型...掌握`Scanner`类的使用方法对于编写交互式程序或处理大量数据非常有帮助。

    Scanner类输入--Eclipse

    在Java编程语言中,`Scanner`类是...在Eclipse环境下,结合这些`Scanner`类的使用方法,可以方便地创建用户交互式Java程序,让代码更加灵活和实用。希望这些内容能对你的学习有所帮助,一起进步,共同探索Java的世界!

    Java Scanner类常见面试题及答案

    4. **读取字符串**:`next()`方法可以读取一个以空格为分隔符的字符串,`String str = scanner.next();`。 5. **读取一行文本**:`nextLine()`方法用于读取输入流中的一整行文本,不包含末尾的换行符,`String line...

    Java中Scanner类的用法.doc

    例如,可以使用 useDelimiter() 方法来设置分隔符,然后使用 hasNext() 方法来判断是否有下一个输入数据。例如,读取文本文件 hrinfo.txt 中的内容,可以使用 Scanner 类来读取每一行数据,然后使用 parseline() ...

    在Java中,Scanner类.zip

    4. **分隔符**:默认情况下,`Scanner`使用空格、制表符或换行符作为分隔符来分割输入。可以通过`useDelimiter()`方法自定义分隔符: ```java scanner.useDelimiter("\\s+"); // 使用一个或多个空白字符作为分隔符...

    java输入语句scanner.docx

    默认情况下,`Scanner` 使用空白字符(空格、制表符、换行符)作为分隔符。如果你需要自定义分隔符,可以使用 `useDelimiter()` 方法。例如: ```java Scanner scan = new Scanner(System.in); scan.useDelimiter(...

    java输入语句scanner用法讲解.pdf

    本文将详细介绍 `Scanner` 类的使用方法及其应用场景。 #### 二、`Scanner` 类简介 `Scanner` 类是 Java 中用于读取基本类型和字符串的实用工具类,它位于 `java.util` 包中。`Scanner` 类可以读取来自不同源的...

    Scanner(3).zip

    2. **分隔符处理**:默认情况下,`Scanner`使用空白字符(空格、制表符、换行符)作为分隔符,但也可以通过`useDelimiter()`方法自定义分隔符。 3. **扫描特定模式**:`hasNext()`和`next()`系列方法可以检查和获取...

    Java中Scanner类的用法

    下面通过两个示例代码进一步了解`Scanner`类的使用方法: ##### 示例一:从控制台读取数据 ```java import java.util.Scanner; public class Example { public static void main(String[] args) { System.out....

    java中Scanner类的接收方法

    下面我们将详细探讨这些方法及其用法。 1. **创建Scanner对象**: 通常,我们通过传递System.in作为参数来创建一个`Scanner`对象,以便从控制台获取用户输入: ```java Scanner scanner = new Scanner(System.in...

    Java中使用Scanner解析文件的代码清单.pdf

    我们可以使用Scanner的`useDelimiter`方法设置自定义分隔符,这里使用正则表达式`\D+`(匹配非数字字符),如下所示: ```java import java.io.File; import java.io.FileNotFoundException; import java.util....

    Scanner.zip

    本教程将深入讲解`Scanner`类的使用方法。 ### 1. 创建Scanner对象 创建`Scanner`对象通常通过传递`System.in`作为参数,用于从键盘接收用户输入。例如: ```java Scanner scanner = new Scanner(System.in); ``` ...

    java中Scanner类的简单用法分享

    这里使用 `useDelimiter("\n")` 方法将分隔符设置为换行符 `\n`。这意味着每次用户按下回车键时,`Scanner` 会认为输入的一个完整项结束。 3. **读取输入**: ```java while (sc.hasNext()) { String s = sc....

    java.util.Scanner应用详解_.docx

    - `useDelimiter(Pattern pattern)` 或 `useDelimiter(String regex)`:设置分隔符模式或正则表达式。 - `findWithinHorizon(Pattern pattern, int horizon)`:在指定范围内查找与模式匹配的子串。 例如: ```...

Global site tag (gtag.js) - Google Analytics