一、Scanner 类
什么叫 Scanner 类
Scanner 类是 java 中用于用户与计算机进行交互的基本类;
怎么使用 Scanner 类
Scanner 类 存在 java.util 包中,并提供方法供用户使用;重点是要调用 Scanner 中的方法时,必须先创建一个对象(创建对象要用 new 运算符),调用的基本格式:
import java.util.*; // 导包
public class Test{
public static void main(String[] args){
String str;
int i;
double dou;
Scanner sc = new Scanner(System.in/*代表标准输入流*/);
str = sc.next(); // 表示读入 String 类型的数据
i = sc.nexIn(); // 表示读入 Int 类型的数据
dou = sc.nexDouble(); // 表示读入 double 类型的数据
str = sc.nexLine(); // 读入当前行的所有输入,直到行尾,然后作为字符串返回
}
}
那 Scanner 类中的 next() 方法 与 nextLine() 它们不都是输入字符,返回字符串类型吗?它们之间有什么区别吗?
首先它们都有共同点 :都是点都会输入一个对象 ,字符串返回,但是要记住 next() 方法是只会返回输入的字符串,怎么理解呢?请看下面的一段代码:import java.util.*;
public class Test11 {
public static void main(String[] args) {
String message;
Scanner sca = new Scanner(System.in);
System.out.println("Enter a line of text:");
message = sca.next();
System.out.println("You entered: \' " + message +" \' ");
}
}
/* output result:
Enter a line of text:
sdsddsfs sdas
You entered:'sdsddsfs'
*/
看到结果了吗? 如果当你输入一段字符串时,如果你再字符串中添加了一个空格,那么系统就给你返回空格前的字符串,而 nexLine() 方法则是将输入的整行字符串返回,照上个程序如果用 nexLine() 输出的结果: sdsddsfs sdas 即整个输出
一、NumberFormat 类 和 DecimalFormat 类
1、NumberFormat 类的基本作用:
在浮点数的输出中有可能发生小数过长的情况,实际上又用不上这么多的小数,所有 NumberFormat 基本类就提供了格式化输出功能,此类定义于 java.text 包中
1.1、NumberFormat 类中的常用方法:
getInstance(): 返回当前默认语言环境的默认值格式;
getCurrencyInstance(): 返回当前默认语言环境的通用格式;
getNumberInstance(): 返回当前默认语言环境的通用数值格式;
getPercentInstance(): 返还当前默认语言环境的百分比格式;
setMaximumFractionDigits(int) : 设置数值的小数部分允许的最大位数;
setMaximumIntegerDigits(int): 设置数值的整数部分允许的最大位数;
setMinimumFractionDigits(int): 设置数值的小数部分允许的最小位数;
setMinimumIntegerDigists(int): 设置数值的整数部分允许的最小位数;
import java.text.*;
public class Test12 {
public static void main(String[] args) {
double dou = 2511.51634564;
double mydouble = 1.2345;
double doub = 0.25;
String mystring = NumberFormat.getInstance().format(dou);
// 该方法的调用输入的是字符串 String 类型 ,所以要将其赋值给 String 类型的变量
String mys = NumberFormat.getCurrencyInstance().format(dou);
String myst = NumberFormat.getNumberInstance().format(dou);
String mystr = NumberFormat.getPercentInstance().format(doub);
System.out.println(mystring); // 返回当前默认语言环境的默认值格式: 2,511.516
System.out.println(mys); // 返回当前默认语言环境的通用格式: £2,511.52
System.out.println(myst); // 返回当前默认语言环境的通用数值格式: 2,511.516
System.out.println(mystr); // 返回当前默认语言环境的百分比格式: 25%
System.out.println("---------------------------------------");
NumberFormat format = NumberFormat.getInstance();
// 重新去定义 当前默认语言环境的默认数值格式 ----> 简称: 重新定义数值格式
format.setMaximumFractionDigits(3);
format.setMaximumIntegerDigits(4);
format.setMinimumFractionDigits(1);
format.setMinimumIntegerDigits(1);
System.out.println(format.format(1234564.546484)); // 4,564.546
}
}
值得注意的一点,也是很重要的一点: 对于 NumberFormat 类来说,在调用其类中的方法之前,并没有创建该类的对象;
很重要的原因是: 其 NumberFormat 类本身不能使用 new 运算符创建一个实例化对象( NumberFormat ),只能直接使用类名调用一个特殊的静态方法来得到一个对象,然后使用对象来调用 format() 方法,将参数转化成字符串返回.
不过通过程序的理解,总觉得有点麻烦,因为如果你想要得到一个浮点数的几位小数,你就必须对默认数值的格式进行重写,然后才能输出你想要浮点数的几位小数,那么有没有一种简单的方法在不重写的情况下就可以输出想要几位数的小数(以下程序包含默认数值格式改写的方法):
import java.text.*;
import java.math.*;
public class Test13 {
double dou = 1.2345;
// 第一种方法,不过过时了
public void m1() {
BigDecimal bg = new BigDecimal(dou);
double f1 = bg.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);
}
// 第二种方法
public static void m2() {
// 如果定义了一个静态的方法,则无法引用非静态的成员变量
// 所以此处重新定义了一个静态局部变量
double dou = 1.12354;
String st = String.format("%.2f",dou);
System.out.println(st);
}
// 第三种方法
public void m3() {
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(dou));
}
// 第四种方法
public void m4() {
NumberFormat nf = NumberFormat.getInstance(); // 先将 默认语言环境的默认数值格式调出
nf.setMaximumFractionDigits(2); // 然后将默认数值格式进行改写成保留两位小数
System.out.println(nf.format(dou));
}
public static void main(String[] args) {
// 创建对象
Test13 t = new Test13();
// 调用方法
t.m1();
// 如果在同类中有静态方法,则可以直接使用方法名 的方式调用该方法
m2();
t.m3();
t.m4();
}
}
二、DecimalFormat 类
DecimalFormat 类也是一个改变浮点数位数额基本类它与 NumberFormat 类的最大不同点就是 DecimalFormat 类需要进行 new 运算符 来创建一个实例化对象
1 1 import java.text.*;2 2
3 3 public classTest14 {4 4
5 5 public static voidmain(String[] args) {6 6
7 7 double dou = 3.1415926;8 8
9 9 DecimalFormat df = new DecimalFormat("0.##"); //记住定义数值保留几位数的方式是 在创建对象的过程中添加 "#.00"后者"0.##",千万不能忘记双引号
10 10
11 11System.out.println(df.format(dou));12 12}13 13 }
View Code