个人总结的《Java经典实例》中没注意到的地方,每一个点以问题或要求为标题,后跟书中相关联的对应章节
获得环境变量(2.1)
使用System.getenv()
可获得全部环境变量,使用System.getenv("PATH")
传入各种值可获得对应变量
这个方法在JDK1.1之后被废弃,在JDK1.5之后重新启用
获取系统属性
使用System.getProperties()
或者System.getProperty("")
获得系统属性
可以使用
System.getProperties().list(System.out)
将结果输出出来
Java平台无关的文件名分隔符和路径分隔符(2.4)
- 系统文件名分隔符(String):separator(例如:)
- 系统文件名分隔符(char):separatorChar
- 系统路径分隔符(String):pathSeparator(例如:;)
- 系统路径分隔符(char):pathSeparatorChar
Unix、Windows各平台上述分隔符并不相同
路径分隔符Unix下是:
,Windows是;
,Windows把:
当作驱动器号的分隔符;文件分隔符Unix下是/
,Windows下是\
,Windows把/
当作了选项分隔符,而选项分隔符在Unix下是-
。
分割用固定字符分隔的字符串(3.2)
使用StringTokenizer
类,实现了迭代器和枚举接口
StringTokenizer
对象有方法hasMoreToken()
和nextToken()
构建StringTokenizer需要待待分割的字符串和指定的分割符,指定的分隔符可以是多个,例如:
StringTokenizer st=new StringTokenizer("The String wait for headle",",|");//分隔符是‘,’和‘|’
正则表达式相关(4.5附近)
整体流程简记:
Pattern pattern=Pattern.compile("regexString",CASE_INSENSITIVE|MUTILINE);//第二个参数可以指定选项
Matcher matcher=pattern.matcher(InputString);
if(matcher.find()){
System.out.println(matcher.group(0));
System.out.println(matcher.start());
//some methods
matcher.replaceAll(newString);
matcher.appendReplacement(StringBulider sb,newString);
matcher.appendTail(StringBuilder sb);
}
浮点数的比较
计算机无法精确表示0.1及它的任意次方,所以浮点数比较和整数不一样,基本类型无法正确比较,要依靠Float和Double,使用其中的equal()方法
数字的格式化(5.8)
使用text包下的NumberFormat对象
调用NumberFormat的getInstance方法会的到一个DecimalFormat实例,对实例调用
setMinimumIntegerDigits(int)
setMaximumIntegerDigits(int)
方法可以设置显示的数字的 整数 部分的最大宽度和最小宽度,调用
setMinimumFractionDigits(int)
setMaximumFractionDigits(int)
方法可以设置显示的数字的 小数 部分的最大宽度和最小宽度
该类默认是按照系统的Locale设置的显示钱币和数字的方式,当然可以通过getInstance传入一个Locale自定义
此外,还可以直接new 一个DecimalFormat,设置各个属性,尤其,可以在构造函数中传入一个字符串,控制显示格式
类似于new DecimalFormat("###.00000##");
此外,NumberFormat类还有静态方法getCurrencyInstance
、getIntegerInstance
、getPercentInstance
分别得到货币、数字、百分数的DecamalFormat。
附一张网上找到的参数表格:
符号 | 位置 | 本地化? | 含义 |
---|---|---|---|
0 | 数字 | 是 | 阿拉伯数字 |
# | 数字字 | 是 | 阿拉伯数字,如果不存在则显示为空 |
. | 数字 | 是 小数分隔符或货币小数分隔符 | |
- | 数字 | 是 | 减号 |
, | 数字 | 是 | 分组分隔符 |
E | 数字 | 是 | 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。 |
; | 子模式边界 | 是 | 分隔正数和负数子模式 |
% | 前缀或后缀 | 是 | 乘以 100 并显示为百分数 |
/u2030 | 前缀或后缀 | 是 | 乘以 1000 并显示为千分数 |
¤(/u00A4) | 前缀或后缀 | 否 | 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
‘ | 前缀或后缀 | 否 | 用于在前缀或或后缀中为特殊字符加引号,例如 “’#’#” 将 123 格式化为 “#123”。要创建单引号本身,请连续使用两个单引号:”# o”clock”。 |
处理不连续的整数序列(5.10)
使用BitSet,使用Bit,节省空间
处理的特别大的数字(5.19)
使用BigInteger和BigDecimal类,通过构造函数传入大数的字符串,构造不可变的大数对象