您的位置:首页 > 职场人生

黑马程序员——使用DataInputStream接收键盘输入数据的问题

2013-01-25 13:28 645 查看
-------android培训、java培训、期待与您交流! ----------

在论坛问过的一个问题,转过来一份

http://bbs.itheima.com/thread-36095-1-1.html

import java.io.*;

import java.util.*;

/*

键盘接收数字问题

*/

class DataInputDemo

{

public static void main(String[] args) throws Exception

{

//scan();

dataInput();

}

public static void scan() throws Exception

{

//这个方法简单,注意int范围

Scanner scan = new Scanner(System.in);

while (scan.hasNextInt())

{

int i = scan.nextInt();

System.out.println(i);

}

}

public static void dataInput() throws Exception

{

while (true)

{

DataInput din = new DataInputStream(System.in);

int x = din.readInt();

DataOutput dout = new DataOutputStream(System.out);

dout.writeInt(x);

System.out.println(x);

}

/*

还是没有解决呀,好像把回车换行混在里边一起解析了

把最后一行注释后,倒可以用用,但问题又来了:

直接输入两位数,OK 一切正常

输入一位数,要按两次回车才可以

输入三位、更多位,回车要按两次或三次,怎么还不固定了??

更要命的是,字母、符号也可以接收,还原样输出了!!

数字还没有长度限制一样,int能装下吗 还原样输出,当字符串了???可用的是写int方法呀

*/

}

}

***********************************************************************************************88

java.util

类 Scanner

java.lang.Object

java.util.Scanner

所有已实现的接口:

Iterator<String>

--------------------------------------------------------------------------------

public final class Scannerextends Objectimplements Iterator<String>一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

例如,以下代码使用户能够从 System.in 中读取一个数:

Scanner sc = new Scanner(System.in);

int i = sc.nextInt();

再看一个例子,以下代码使 long 类型可以通过 myNumbers 文件中的项分配:

Scanner sc = new Scanner(new File("myNumbers"));

while (sc.hasNextLong()) {

long aLong = sc.nextLong();

}扫描器还可以使用不同于空白的分隔符。下面是从一个字符串读取若干项的例子:

String input = "1 fish 2 fish red fish blue fish";

Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");

System.out.println(s.nextInt());

System.out.println(s.nextInt());

System.out.println(s.next());

System.out.println(s.next());

s.close(); 输出为:

1

2

red

blue 以下代码使用正则表达式同时解析所有的 4 个标记,并可以产生与上例相同的输出结果:

String input = "1 fish 2 fish red fish blue fish";

Scanner s = new Scanner(input);

s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");

MatchResult result = s.match();

for (int i=1; i<=result.groupCount(); i++)

System.out.println(result.group(i));

s.close();

import java.io.*;

public class Test6

{

public static void main(String[] args)

{

int[] arr = new int[5];

//对数组各元素进行赋值

for (int x=0; x<arr.length; x++)

{

//定义缓冲区,用于存放键盘录入数据

//具体定多少字节还不清楚,实验了一会,感觉8个还可以吧,

//再少数字稍大点就挂,再大点也没多大关系

byte[] buf = new byte[8];

int len = 0; //len用于存放键盘录入的字符个数

try

{

len = System.in.read(buf); //开始读取键盘录入数据

//对键盘录入数据进行转换,转为int类型,费了好大工夫才完成

//键盘录入数据是字节流,看到DataInputStream可以一次读入一个Int数据

//但没成功,就换了这样一个方法,将存入缓冲区的键盘数据转成字符串再转成数字

arr[x] = new Integer(new String(buf, 0, len-2));//这里的len长度包含数字输入后按的回车键\r\n

System.out.println(arr[x]);

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

/*******************************************

try

{

//接收从键盘输入的一个整数

//查文档知读一个整数的方法在DataInputStream中

int num = new DataInputStream(System.in).readInt();

//将从键盘接收到的数字存入数组中

arr[x] = num;

//?????这个地方怎么得到的不是想要的数字呢??

System.out.println(arr[x]);

}

用上面的方法接收键盘数字得到的结果???

22

842140938

15

825560330

10

825232650

11

825298186

0

1

806160945

*/



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐