Java中,charAt和indexOf识别不了火炬之光2控制台空格Scanner用户输入的“ ”空格。求助!

4712人阅读
& & &&有时候需要我们用Scanner接收char类型数据,而不是接收String。比如,当我们要用到switch()语句时,就不能用String类型了。
& && &&switch语句:
  switch关键字的中文意思是开关、转换的意思,switch语句在条件语句中特别适合做一组变量相等的判断,在结构上比if语句要清晰很多。
  switch语句的语法格式为:
   switch(表达式){
   case 值1:
   功能代码1;
  [break;]
   case 值2:
   功能代码2;
   [break;]
   ……
  default:
   功能代码1;
   [break;]
   语法说明:
   1、 表达式的类型只能为byte、short、char和int这4种之一。
   2、 值1、值2…值n只能为常数或常量,不能为变量。
   3、 功能代码部分可以写任意多句。
   4、 break关键字的意思是中断,指结束switch语句,break语句为可选。
   5、 case语句可以有任意多句,是标号语句。
   6、 default语句可以写在switch语句中的任意位置,功能类似于if语句中的else.执行流程:当表达式的值和对应case语句后的值相同时,既从该位置开始向下执行,一直执行到switch语句的结束,在执行中,如果遇到break语句,则结束switch语句的执行。
& & & 正常使用Scanner时,可以这样:
import java.util.S
public class TextScanner{
public static void main(String [] args){
//创建Scanner对象 接受从控制台输入
Scanner input = new Scanner(System.in);
System.out.println(&请输入名字:&);
//接受String型
String name = input.next();
System.out.println(&请输入学号&);
//接受int型
int id = input.nextInt();//什么类型next后面就接什么 注意大小写
//输出结果
System.out.println(&名字为:&+name+&\t学号为:&+id);
& & &当用switch接收数据时,可以这样:
Scanner s=new Scanner(System.in);
char b =s.next().charAt(0);
System.out.println(b);
& & & 然后就可以用switch了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:44030次
排名:千里之外
原创:13篇
评论:11条
(1)(2)(4)(2)(1)(1)(5)(5)JAVA中Scanner的next方法为什么不能得到带空格的字符串?而nextLine就可以?_百度知道
JAVA中Scanner的next方法为什么不能得到带空格的字符串?而nextLine就可以?
比如输入Show me用next只能得到Show而用nextLine就能得到完整的Show me
next查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。nextLine此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。 因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行。API的解释完全没看明白
提问者采纳
你可以理解成next下一个,空格被当做分隔符,所以下标里的值是Show而nextLine是读出当前下标的一行,你可以理解为下一行,对他来讲每行就是他的分隔符。不要对API死啃,看看大概意思~然后自己试试就知道是怎么回事了。
提问者评价
其他类似问题
为您推荐:
其他2条回答
这个没有办法,SCANNER就是有这个问题的。
只要你输入有空格,他会到空格就结束。
要解决这个问题,只能用IO来解决。
参考以下:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
注意不能用Scanner,Scanner遇空格就结束
import java.io.*;
public class Test {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
str = reader.readLine();
int letter=0;
int space=0;
int number=0;
int other=0;
for (int i = 0; i & str.length(); i++) {
if (Character.isLetter(str.charAt(i))) {
}else if(Character.isSpa...
next()方法一定要读取到有效的字符后才结束输入,对输入有效字符前遇到的空格键,TAb键,ENter等,next()会 自动将其去掉,只有在输入有效字符之后,next()方法才将其后的空格键,TAb键,ENter等视为分隔符或者结束符。nextline()方法的结束符是enter键,即返回的是enter键之前的所有字符。比如hello javanext()读出来的是hellonextline()是hello java
scanner的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁下次自动登录
现在的位置:
& 综合 & 正文
java统计Scanner输入的行数,制表位数以及空格数
最近在学C语言,每写一个C语言,就再写一个java的实现,发现简单的小程序,还是C语言简单啊。。。java写起来要复杂繁琐的多。。
说到统计,通常的需求是统计一篇的各种信息数据。但神需求无处不在,只要技术使用正确就一定可以解决的。
import java.util.*;
public static void main(String[] args)
Scanner sc =new Scanner(System.in);
String str=sc.nextLine();
int n=0,m=0,p=0;
while(sc.hasNext()&&!str.equals("EOF"))
for(int i=0;i&str.length();i++)
if(str.charAt(i)=='\t')
if(str.charAt(i)==' ')
str=sc.nextLine();
System.out.println("行数为"+n+"行,制表位有"+m+"个。空格有"+p+"个");
另外判断制表位和空格的时候也可以通过str.indexOf("\t")和str.indexOf(" ")
运行结果如下:
至于为啥在EOF后面还得输入任意字符呢?
因为程序一开始就是定义了一个Scanner接受用户输入,虽然之前的EOF让程序退出统计的那个while循环了,但由于输入完EOF后,我们又敲了一个回车,所以程序会再接受一次输入才能往下运行,输出统计数据。
这个程序也可以用上正则表达式,但有点高射炮打蚊子的感觉喽~
&&&&推荐文章:
【上篇】【下篇】这行代码 scanner.next().charAt(0);为什么是charAt(0)?_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:300,637贴子:
这行代码 scanner.next().charAt(0);为什么是charAt(0)?收藏
package onlyfun. import java.io.*;import java.util.*; public class ByteArrayStreamDemo {
public static void main(String[] args) {
File file = new File(args[0]);
BufferedInputStream bufferedInputStream =
new BufferedInputStream(
new FileInputStream(file));
ByteArrayOutputStream arrayOutputStream =
new ByteArrayOutputStream();
byte[] bytes = new byte[1];
// 将文件内容写入位数组流
while(bufferedInputStream.read(bytes) != -1) {
arrayOutputStream.write(bytes);
arrayOutputStream.close();
bufferedInputStream.close();
// 以字符方式显示位数组内容
bytes = arrayOutputStream.toByteArray();
for(int i = 0; i & bytes. i++) {
System.out.print((char) bytes[i]);
System.out.println();
// 让使用者输入位置与字符修改位数组内容
Scanner scanner = new Scanner(System.in);
System.out.print("输入修改位置:");
int pos = scanner.nextInt();
System.out.print("输入修改字符:");
// 修改数组中对应的字符
bytes[pos-1] = (byte) scanner.next().charAt(0);
// 将位数组内容存回文件
ByteArrayInputStream byteArrayInputStream =
new ByteArrayInputStream(bytes);
BufferedOutputStream bufOutputStream =
new BufferedOutputStream(
new FileOutputStream(file));
byte[] tmp = new byte[1];
while(byteArrayInputStream.read(tmp) != -1)
bufOutputStream.write(tmp);
byteArrayInputStream.close();
bufOutputStream.flush();
bufOutputStream.close();
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("请指定文件名称");
catch(IOException e) {
e.printStackTrace();
[发自WindowsPhone客户端-百度贴吧]
已经看懂了,我终于知道怎么用Scanner类能得到单个字符了,培训学校那地方老师都不讲,都是自己看书自学。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
java基本的程序设计结构
下载积分:400
内容提示:java基本的程序设计结构
文档格式:DOC|
浏览次数:0|
上传日期: 19:50:07|
文档星级:
该用户还上传了这些文档
java基本的程序设计结构
官方公共微信

我要回帖

更多关于 charat函数 的文章

 

随机推荐