第十三章-字符串
一、String的不可变性
????? String对象是不可变的,String类中每一个看起来会修改String对象值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。
?
二、格式化
????? Java字符串格式化可以使用java.util.Formatter类处理,或者直接使用String.format()方法,将字符串翻译成想要的结果。目标格式根据传入的字符串公式决定,其语法为:
????? %[arg_index$][flags][width][.precision]conversion
arg_index:十进制整数,用于表明参数在参数列表中的位置。"1$" 为第一个参数,"2$" 为第二个参数,?依此类推。
flags:表示控制输出格式的字符集,例如'-'为左对齐。
width:非负十进制整数,表明要向输出中写入的最少字符数。
.precision:非负十进制整数, 通常用于浮点数,限定小数位数。
conversion:数据待转换的类型。
一般的类型值有:
?
?d?整形(十进制)?c?Unicode字符?b?boolean值?s?String?f?浮点数(十进制)?e?浮点数(科学计数法)?x?整数(十六进制)?h?散列码(十六进制)?%? ?字符%例子:
public class Test {public static void main(String[] args){//使用java.util.Formatter类Formatter formatter = new Formatter(System.out);formatter.format("Hello, %1$s! I'm %2$d years old!\n", "Peter", 21);//直接使用String的format方法System.out.print(String.format("Hello, %2$s! I'm %1$d years old!", 21, "Peter"));//若省略[arg_index],则参数要按转换类型的顺序填写://即format("Hello, %s! I'm %d years old!", "Peter", 21));}}
?
输出:
Hello, Peter! I'm 21 years old!Hello, Peter! I'm 21 years old!
?
三、Scanner
????? java.util.Scanner是Java SE5中新增的用于文本扫描读入的类,它可以接受任何类型的输入对象,包括File对象、InputStream、String或者Readable对象。有了Scanner,所有的输入、分词以及解析的操作都隐藏在不同类型的next方法中,所有的基本类型(除了char以外)都有对应的next方法,例如nextInt()、nextDouble()等,普通的next()方法返回下一个String。在默认情况下,Scanner根据空白字符对输入进行分词。