1、不可变的String
String对象是不可变的。String类中的每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改修改后的字符串内容。
public class Tree1 { public static String upcase(String s) { return s.toUpperCase(); } public static void main(String[] args) { String q = "how are you"; System.out.println(q); String qq = upcase(q); System.out.println(q); System.out.println(qq); } }
输出为:
how are you
how are you
HOW ARE YOU
upcase返回的是toUpperCase()方法的结果,这个方法是使String对象的字母全部大写,然后返回一个String对象。
这里的q并没有发生变化,所以String对象是不可变的可以理解为c语言中的传值调用。
2、重载“+”与StringBuider
“+”字符串是用来连接String的。
public class Tree1 { public static void main(String[] args) { String q = "how are you" + "233" + "what?"; System.out.println(q); } }
输出就是
how are you233what?
其实这里的 +的工作原理并不是使用的String的append方法实现的,编译器创建了一个StringBuilder,用来构造最终的String对象。。
3、正则表达式
一般来说,正则表达式就是以某种方式来描述字符串,因此你可以说:“如果一个字符串含有这些东西,那么它就是我正在找的东西”,例如想要找一个数字,它可能负号在最前面,那你就写一个负号加上一个问好,就像
-?
要描述一个整数,有一位或者多位阿拉伯数字,在正则表达式中用d表示一位数字
Java对反斜线有和其他语言不一样的处理,比如其他语音中,\表示想要插入一个普通的反斜线,而在Java中就是想要加入一个正则表达式的反斜线,所以想要插入一个字面上的 普通的反斜线应该是\\,普通的一位数字就是\d,不过换行和制表符就只需要单反斜线:
要表示“一个或多个之前的表达式”,应该使用+,所以,如果想要表示“可能有一个负号,后面跟着一位或者多位数字”可以这样:
-?\d+
public class Tree1 { public static void main(String[] args) { System.out.println("-122".matches("-?\d+")); System.out.println("122".matches("-?\d+")); System.out.println("".matches("-?\d+")); System.out.println("+911".matches("(-|\+)?\d+")); } }
输出:
true true false true
前两个输出就不用说了,第三个什么都没有,所以这个+就表示 至少要有一个数字。
第四个的 (-|\+)?\d+
?\d+ 这里的意思是至少也要一个数字,|表示或操作,-|\+表示 一个加号或者负号,(-|\+)?这个表示可能有一个加号或者负号,总的就是可能有一个加号或者负号再或者都没有的数字。
split()方法: “将字符串从正则表达式匹配的地方切掉”
public class Tree1 { public static void main(String[] args) { String s = "233-2"; System.out.println(Arrays.toString(s.split("-\d+"))); String t = "what are you name"; System.out.println(Arrays.toString(t.split("\w"))); System.out.println(Arrays.toString(t.split(" "))); System.out.println(Arrays.toString(t.split("a\w\w"))); } }
输出:
[233]
[, , , , , , , , , , ]
[what, are, you, name]
[what , you n]
w表示一个单词字符
替换:
public class Tree1 { public static void main(String[] args) { String s = "233-2"; System.out.println(s.replaceFirst("2", "q")); System.out.println(s.replaceAll("2", "q")); System.out.println(s.replaceAll("2|3", "q")); System.out.println(s.replaceAll("2|3|-", "q")); System.out.println(s.replaceAll("-\d", "q")); System.out.println(s.replaceAll("\d+-\d", "q")); } }
输出:
q33-2 q33-q qqq-q qqqqq 233q q
replaceFirst()替换第一个,replaceAll()替换所有符合的,而且可以替换多个
具体可以看这个 http://www.runoob.com/java/java-regular-expressions.html