由于最近在百度知道上遇到点特殊的问题,研究查阅后了解了些东西,拿出来分享下,这里只针对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
分享到:
相关推荐
Acunetix Web Vulnerability Scanner+使用说明书Acunetix Web Vulnerability Scanner+使用说明书Acunetix Web Vulnerability Scanner+使用说明书Acunetix Web Vulnerability Scanner+使用说明书Acunetix Web ...
Java Scanner File PrintWriter使用实例
1.鼠标邮件发送要测试的反序列化数据到 Manual testing 2.选择测试方式,进行测试 3.假如测试出来了,鼠标右键发送到 exploiting 模块
Scanner类的用法2007-03-25 14:41Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
Java中Scanner类的用法,java初学者必看
漏洞扫描工具Shadow Security Scanner 7.34官方版,仅做为学习使用
vue框架插入i18next-scanner自动化生成key的demo (√ ) 解决页面使用$t('title')导致可读性差问题 (√ ) 解决国际化变量命名冲突问题 技术教程: ...
java输入语句scanner
今天小编就为大家分享一篇在java中用Scanner类读入单个字符的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java 5.0 加入的scanner类的使用方法,可以简单的输入输出控制,取代原来的输入输出流控制的麻烦事情
此例子是一个字符串转各种编码的demo,编码格式是已经定义好的,当然你也可以扩充,使用时只需要构造它的对象然后调用对应的转换格式的方法即可,很简单的!
例如,可以提示用户输入一个字符串或数字,然后程序会等待用户的输入,并使用Scanner的方法(如nextLine()或nextInt())读取用户的输入。 使用Scanner的基本步骤如下: 导包:首先,需要将Scanner类所在的包导入到...
我们使用 System.out.println 方法来提示用户输入,然后使用 Scanner 的 next 和 nextInt 方法来获取用户输入的字符串和整数。最后,我们打印出用户输入的信息,并关闭 Scanner 对象以释放资源。 请注意,nextInt ...
Acunetix Web Vulnerability Scanner 7中文详细教程
这是我在一个项目中搜集的几种方法,来实现字符串的反转,有的是用正则表达式,有的是用Scanner扫描器,有的挺经典的!希望对朋友有所启示!
java中Scanner类nextLine()和next()的区别和使用方法 java中Scanner类nextLine()和next()的区别和使用方法
Acunetix web vulnerability scanner8的使用说明,英文版!
ASML Scanner 光刻机介绍
IIS,Scanner利用IIS漏洞写shell . IIS,Scanner利用IIS漏洞写shell IIS,Scanner利用IIS漏洞写shell