- 每一个看起来会修改String值得方法,其实都是创建了一个全新得String对象public final class String{}
- 方法参数传递其实是引用的传递--值传递
- StringBuffer方法:append() toString() delete() insert() replace() subString() reverse()
- Java中仅有的两个重载过的操作符:+ += 用于字符串的连接(因为太低效了,编译器使用StringBuffer进行连接)(Java不允许程序员重载任何操作符);;但是若使用循环等操作或者可能让编译器创建多个StringBuffer的方法,建议直接自己使用StringBuffer,工具的出现不是为了让你变笨变懒而是节省你的时间
- toString() 打印内存地址-super.toString() 而不能使用this 因为使用this会调用toString然后就重复了
- Java自带的反编译:javap -c ClassName (-c表示生成JVM字节码)
- 格式化输出:System.out.format("%d %f",x,y) System.out.printf("%d %f",x,y)
- java.util.Formatter.format()----构造器传入PrintStream、OutputStream和file
- 与上一个方法类似,String.format(static方法)直接返回一个格式化的字符(上个方法直接输出)
- 格式化说明符:默认右对齐(可用flages:-该改变对齐方向),以空格填充
- %[argument_index$][flages][width][.precision]conversion
%[表示第几个变量从1开始][标识][域的最小尺寸][.最大尺寸]
flages:部分
+ 带上正负号 ( 将负数扩在括号内 , 添加分组控制符 0 前面用0填充 - 对齐方式
precision不像width一样可以用于各种类型的数据转换,用在String表示String输出字符的最大数量;用在浮点数表示小数部分要显示出来的位数(默认6位),过多舍入,过少尾部补零,无法应用于整数,用于整数throw Exception
conversion:部分
d 整数(十进制) x 整数(十六进制) f 浮点数(十进制) e 科学计数的浮点数
c Unicode字符 b Boolean值 s String h 散列值(16进制) %字符’%‘
不推荐的StringTokenizer以及推荐的Scanner(定界符)
StringTokenizer stoke = new StringTokenizer("I am a man!");
while(stoke.hasMoreElements())
System.out.print(stoke.nextToken() + "@");
// I@am@a@man!@
//Scanner可以接受任何类型的输入对象File、InputStream、String、Readable
Scanner scanner = new Scanner ("I am a man!");
while(stoke.hasNext())//hasNext(正则表达式) {
System.out.print(stoke.next() + "#");
//若使用两组正则表达式 ()()可使用下述方法
//MatchResult match = scanner.natch();
//String group1 = match.group(1);
//String group2 = match.group(1);
//Scanner默认使用空白字符对输入进行粉刺,但是你可以用正则表达式指定自己所需的定界符
//scanner.useDelimiter("\\s*,\\s*");
}
// I#am#a#man!#
Scanner可以接受任何类型的输入对象File、InputStream、String、Readable
Scanner有一个假设,在输入结束时会抛出IOException,所以Scanner会把IOException吞掉
Scanner读取数据nextLine() nextInt()等
总结
String常用方法及StringBuffer的常用应用
格式化输出(String.format()以及Formatter.format)