scanner system.in useDelimiter疑问

pcmlose 2012-05-23 05:09:52

import java.util.Scanner;

public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.useDelimiter(",");
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
}



输入 1,2,3,4,5
结果是
1
2
3
4

最后那位怎么不见了

...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcmlose 2012-05-23
  • 打赏
  • 举报
回复
不是已经按回车来确定我输入的字符串了吗,这应该可以确实我要输入的内容吧?

import java.util.Scanner;


public class Test {
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
System.out.println(scan.next());
}

}
}



那为什么我输入 1 2 3 4 5 //5后面没有空格
输出的结果是
1
2
3
4
5
而换了分隔符却不行,难道回车里含了空格,回车应该是\n\r吧?
andycpp 2012-05-23
  • 打赏
  • 举报
回复
当Scanner从System.in中读数据时,调用next()或hasnext()时,如果没数据了,系统会陷入等待,等你从键盘录入。换句话说,你把hasnext()写到while循环里,程序一定会因为数据不足而陷入停顿的

Scanner从System.in中读数据,要么你明确的知道你会输入几个数据,就调用几个next()
要么你读入一行,再对这行进行分解,例如:
        Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Scanner Scanner = new Scanner(s);
Scanner.useDelimiter(",");
while(Scanner.hasNext()) {
System.out.println(Scanner.next());
}
pcmlose 2012-05-23
  • 打赏
  • 举报
回复
那怎么解释TXT的结果
brightyq 2012-05-23
  • 打赏
  • 举报
回复
5后面要加,
pcmlose 2012-05-23
  • 打赏
  • 举报
回复


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class Test {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(
new BufferedReader(new FileReader("12345.txt")));
sc.useDelimiter(",");
while (sc.hasNext()) {
System.out.println(sc.next());
}
sc.close();
}
}


12345.txt里的内容是
1,2,3,4,5

则输出
1
2
3
4
5
实验1 分析成绩单 1. 实验目的:掌握字符输入、输出流用法。 2. 实验代码: Fenxi: import java.util.*; public class Fenxi{ public static double getTotalScore(String s){ Scanner scanner=new Scanner(s); scanner.useDelimiter("[^0123456789.]+"); double totalScore=0; while(scanner.hasNext()){ try{ double score=scanner.nextDouble(); totalScore=totalScore+score; } catch(InputMismatchException exp){ String t=scanner.next(); } } return totalScore; } } AnalysisResult: import java.io.*; import java.util.*; public class AnalysisResult{ public static void main(String args[]){ File fRead=new File("score.txt"); File fWrite=new File("scoreAnalysis.txt"); try{ Writer out= new FileWriter(fWrite,true);//以尾加方式创建指向文件fWrite的out流 BufferedWriter bufferWrite=new BufferedWriter(out); //创建指向out的bufferWrite流 Reader in=new FileReader(fRead); //创建指向文件fRead的in流 BufferedReader bufferRead=new BufferedReader(in); //创建指向in的bufferRead流 String str=null; while ((str=bufferRead.readLine())!=null){ double totalScore =Fenxi.getTotalScore(str); str=str+"总分:"+totalScore; System.out.println(str); bufferWrite.write(str); bufferWrite.newLine(); } bufferRead.close(); bufferWrite.close(); } catch(IOException e){ System.out.println(e.toString()); } } } 3. 结果截图: 4. 实验分析: 1. 改进程序,使得能统计出每个学生的平均成绩。 答: 2. 现在有如下格式的货物明细(文本格式)goods.txt 品名:电视,length:102 cm,width:89 cm,height:56 cm. 品名:轿车,length:4502 cm,width:178 cm,height:156 cm. 品名:桌子,length:125 cm,width:78 cm,height:68 cm. 答: CalculateVolume.java import java.io.*; import java.util.*; public class CalculateVolume{ public static void main(String args[]){ File fRead=new File("goods.txt"); File fWrite=new File("goodsVolume.txt"); try{Writer out=new FileWriter(fWrite,true); BufferedWriter bufferWrite=new BufferedWriter(out); Reader in=new FileReader(fRead); BufferedReader bufferRead=new BufferedReader(in); String str=null; while((str=bufferRead.readLine())!=null){ double s=Jisuan.getVolume(str); str=str+"体积:"+s+"cm^3"; System.out.println(str); bufferWrite.write(str); bufferWrite.newLine(); } bufferRead.close()

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧