黑马程序员——使用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
*/
在论坛问过的一个问题,转过来一份
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
*/
相关文章推荐
- 黑马程序员——使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
- 使用next()和nextLine()方法接收从键盘输入字符串型数据区别
- “黑马程序员”使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印
- 在mysql中建立表格,表名称和列的定义都使用键盘输入,用户数据也要通过键盘输入。
- 使用三种算法解决从键盘输入两个整数,输出两个整数的最大公约数的问题
- 键盘输入流,接收大文本数据,并输入一个图片路径,之后将这些数据保存在数据表中
- [JAVA]使用JDB调试时键盘输入被JDB占用的问题解决方案
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- C# 使用 USB转串 接收数据 问题
- 在Java中使用键盘输入数据的几种方法
- JavaSE7基础 创建Scanner对象,使用nextInt()接收输入的整数数据
- 解决VS2010使用mscomm控件无法接收数据的问题
- java 接收从键盘上输入的数据,保存到文本文件里
- C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)
- 使用angularjs的$http.post异步提交数据时,服务器接收不了的问题
- R:使用键盘输入数据
- C#问题之Tab键和使用数据键盘
- multimap的简单使用 一道数据输入,查询的问题
- JAVA之使用键盘输入数据
- 在Java中使用键盘输入数据【总结篇】