当初作为一个计算机小白,最喜欢的就String类,当时只会玩控制台打印(System.out.println();)的我,终于能够用代码显示自己想要的语言了。
简单介绍一下String类,全名为java.lang.String;
String是java系统给我们免费提供的类库之一,对了。这些java给我们写好的工具类库又叫做API(应用程序编程接口),经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等。
- String的构造
String类有多种构造方法,这里不一一介绍,比较常用的就是:
new String();
new String(String original);
String(char[] value) ;
不过在我看来,这些都不常用,我都没用过,当我需要声明一个String类型的变量时,我会写String str = "";
此时变量str的值不为null,也就是说String类可以不通过写new来创建对象,这一点比较特殊。因为我们所了解的可以这样声明的变量类型只有所谓的基本类型,如int、long、char、double……但是String并不属于基本类型,而是一个规规矩矩的包装类。这只是一点,下面我们来介绍一下String的特殊性。
- String的特殊性
。java.lang.String是由final修饰的,不能被继承
。字符串一旦被创建,对象永远无法改变,但字符串引用可以重新赋值
一旦改变字符串的值,则必定是产生了新的对象,指向新的地址
。字符串其实是字符数组。。
。当使用字面量创建字符串对象时,会重用内容相同的字符串对象,如:
String s1 = "HelloWorld";
String s2 = "HelloWorld";
System.out.println(s1==s2); //true
也就是说,上面写法s1/s2指向同一地址的对象。
双等于比较的是两者的地址,但是在String中不是恒定成立的,比如使用new创建对象时,就算是与之前内容一样,也不会沿用之前的地址,而是强制的创建新地址,此时双等于不会成立,但是.equal();成立
String s1 = "HelloWorld";
String s2 = new String("HelloWorld");
System.out.println(s1==s2); //false
System.out.println(s1.equal(s2)); //true
注意下面的情况:
String s1 = "HelloWorld";
String s2 = "Hello"+"World";
System.out.println(s1==s2); //true
System.out.println(s1.equal(s2)); //true
String s1 = "HelloWorld";
String s2 = "Hello";
String s3 = "World";
String s4 =s2+s3;
System.out.println(s1==s4); //false
System.out.println(s1.equal(s4)); //true
这些例子我们可以看得出“= =”和“.equal()”是有区别的,这里简单一提,“= =”代表的意思就是比较符号两边变量所指向的地址,这个符号的意义是不会被重写的;而.equal()是封装在类Object中的一个方法,如果不重写,它的意义和“==”意义相同,而上文中String类就对equal进行了重写,它在String类型的使用是用来比较字符串的字符序列是否完全相等。
- String的常用方法
我们在eclipse中随便声明一个String对象,然后用小数点可以点出来很多的方法,这些就是String及其父类所封装的可以被我们使用的方法。下面介绍几个典型代表,介绍时我尽量使用代码表达意义,因为都很简单。
1、.toCharArray()
String str = "thinking in java";
char[] cha = str.toCharArray();
System.out.println(cha); //char[] 数组直接可以打印,不用遍历
2、indexof
String str = "thinking in java";
int index = str.indexOf("java"); //目标字符在字符串前面有几个字符(获得它的下标)
System.out.println("index:"+index); //index:12
index = str.indexOf("in",3); // 从下标3开始找目标字符
System.out.println("index"+index); // index:5
3、lastIndexOf
String str = "thinking in java";
index = str.lastIndexOf("in");//目标字符在字符串中最后一次出现的位置
System.out.println(index); //9
4、substring
//获取当前字符串中,指定范围内的字符串
String str = "www.oracle.com";
String sub = str.substring(4,10); //含str[4]不含str[10](java规定:含开头不含结尾)
System.out.println(sub);//oracle
/*
* 下面是获取域名的方法,适用所有基本域名
*/
String url = "http://www.tedu.cn/";
String u= url.substring(url.indexOf(".")+1,url.indexOf(".",url.indexOf(".")+1));
System.out.println(u);
//截取第一个点和第二个点之间的内容
/*
* substring 重载的方法,只需要一个参数,
* 即从指定位置开始,截取到末尾
*/
相当于str.substring(x, str.length());
5、trim
//去除字符串两边的空白(包括tab和空格) trim();
String str = " hello! ";
String s = str.trim();
System.out.println(str);// hello!
System.out.println(s);//hello!
6、charAt
//获取当前字符串指定位置上的字符,并转化为char型
String str = "thinking in java";
char a = str.charAt(9);
System.out.println(a); //i
//例题:检查字符串是否为回文
String str = "上海自来水来自海上"; //这就是回文
for (int i = 0; i < str.length()/2; i++) {
if(str.charAt(i)!=
str.charAt(str.length()-1-i)){
System.out.print("不");//不换行
break;
}
//下标为0的应该等于下标为8的
}
System.out.println("是回文!");
7、大小写转化
/*
* 转换大小写的方法
* String toUpperCase();
* String toLowerCase();
*/
8、startsWith、endsWith
//查看当前字符串是否是以指定的字符串开始或者结尾的
String str = "You are a bitch !";
if (str.startsWith("You")) { //该方法返回值是一个boolean型
System.out.println(true);//true
}else {
System.out.println(false);
}
System.out.println(str.endsWith(" !"));//true
上文我们提到String是final修饰的不可被继承,而且对象一旦创建不能被改变地址只能改变其值,但是要注意,频繁修改字符串会带来性能问题。所以接下来的文章我会介绍StringBuilder和StringBuffer。
码字不易,点波关注成为我第一个粉丝吧!