字符串

String对象是不可变的,你可以给一个String对象加任意多的别名。因为String对象具有只读特性,所以指向它的任何引用都不可能改变它的值,因此,也就不会对其他引用有什么影响。

一、重载“+”与StringBuilder

不可变性会带来一定的效率问题。为String对象重载的“+”操作符就是一个例子。重载的意思是,一个操作符在应对于特殊的类时,被赋予了特殊的意义。在使用“+”拼接字符串时,编译器会自动引入StringBuilder类,因为它更高效。

//编译器会创建一个StringBuilder然后依次调用append()方法,最后toString()
String mango = "mango";
String s = "abc"+mango+47;

下面是生成String的两种方法:

//使用多个String对象
String result = "";
for(int i=0;i<fields.length:i++){
    result += fields[i];
}
//使用StringBuilder
StringBuilder result = "";
for(int i=0;i<fields.length;i++){
    result.append(fields[i]);
}

虽然String的“+”操作自动引入了StringBuilder,但是第一种方法中,StringBuilder是在循环里构造的,这就意味着没经过一次循环,就会创建一个新的StringBuilder对象。第二种只生成了一个StringBuilder对象。
StringBuilder提供了丰富的方法,包括insert()、repleace()、substring()甚至reverse()、delete(),最常用的还是append()和toString()方法。
StringBuilder是在Java SE5引入的,在这之前Java用的是StringBuffer,后者是线程安全的,开销也更大。

二、String上的操作

length()
chartAt()
toCharArray()   //生成一个char[],包含String的所有字符
compareTo(String s)     //按词典顺序比较,返回负数、零、正数
contains(CharSequence char)
equalsIgnoreCase(String s)  //忽略大小写
startsWith(String s)
endsWith(String s)
indexOf(Char char/String s)     //不包含则返回-1
lastIndexOf()   //从后向前搜索
subString()     //返回新的string
concat(String s)    //拼接字符串
replace(CharSequence char)  //返回替换字符后的新string
toLowerCase()/toUpperCase()
trim()  //将string两端的空白字符删除后,返回新的string

三、格式化输出

printf()
C语言风格的格式化输出,它并不适用重载的“+”操作符来连接字符串,而是使用占位符来表示数据将来的位置。

printf("Row 1: [%d %f]\n",x,y);     //%d表示x是一个整数,%f表示y是一个浮点数

System.out.format()
format()可以用于PrintStream或PrintWriter对象,也包括System.out对象,适用于不同的输出目的地。
Formatter类
Formatter可以通过构造器重载接受多种输出目的地,包括PrintStream、OutputStream和File。
可以控制空格与左右对齐,还可以通过占位符将不同类型的数据转换成想要的类型,包括:
d(十进制整数型)、c(Unicode字符)、b(Boolean值)、s(string)、f(十进制浮点数)、e(科学计数浮点数)、x(十六进制整数)、h(十六进制散列码)、%(字符“%”)
其他类型转换成boolean时,只要参数不是null,转换结果永远是true;

String.format()

String showLocation(int row,int column){
    return String.format("show at row%d,column%d",row,column);
}

四、正则表达式

以某种方式来描述字符串。例如,要找一个数字,它可能有一个符号在最前面,那你就写一个符号家还是那个一个问号:-?;要描述一个整数,用\d来表示。
Java对反斜线\的不同处理:
Java中,\表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊意义”,例如,想要表示一个数字,正则表达式应该是\d。如果想插入一个普通的反斜线,则应该这样\\。不过换行和制表符之类的东西只需要使用单反斜线:\n\t。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值