创建字符串
常见的创建字符串的三种方式:
// 方式一
String str = "hello world";
// 方式二
String str2 = new String("hello world");
// 方式三
char[] array = {'a', 'b', 'c'};
String str3 = new String(array);
"hello" 这样的字符串字面值常量, 类型也是 String.
String 也是引用类型. String str = "Hello"; 这样的代码内存布局如下:
下面我来写一个代码:
String str1 = "hallo";
String str2 = str1;
str1 = "world";
Systrm.out.println(str2);
很多人是否会认为 str1 的值改变了因此 str2 的值也跟着改变了,事实上 str1 里面的值并非是改变了而是指向了一个新的字符串。所以 str2 里面的值还是 hallo 。
此时该代码在内存中的布局是这样的:
判断字符串相等
在整型中我们判断两个整形是否相等用的是一下的方法:
int x = 10;
int y = 10;
if(x == y){System.out.println(true);
}
但是在字符串中我们能否也用这个方法呢?
我们用代码试试:
我们乍一看好像是可以的,但是我们换一个方法试试呢?
答案是错误的!
注意: String 使用 == 比较并不是在比较字符串内容, 而是比较两个引用是否是指向同一个对象。
Java 中要想比较字符串的内容, 必须采用String类提供的equals方法。
字符、字节与字符串
字符与字符串
将字符数组转变为字符串
public class Test {public static void main(String[] args) {char[] array = {'a','b','c','d'};String str1 = new String(array);System.out.println(str1);String str2 = new String(array,0,2);System.out.println(str2);}
}
输出结果:
在将字符数组转变为字符串时既可以将整个数组转变为字符串也可以指定范围。
字符串转变为字符数组
public class Test {public static void main(String[] args) {String str = "abcdef";char[] array = str.toCharArray();for (int i = 0; i < array.length; i++) {System.out.println(array[i]);}}
}
输出结果:
获取字符串指定位置的字符
public class Test {public static void main(String[] args) {String str = "abcdef";char ch = str.charAt(1);System.out.println(ch);}
}
字节与字符串
将字符串转变为字节数组
public class Test {public static void main(String[] args) throws UnsupportedEncodingException {String str = "halloworld";byte[] array = str.getBytes();for (int i = 0; i < array.length; i++) {System.out.println(array[i]);}}
}
运行结果:
字符串常见操作
字符串比较
区分大小写的比较
public class Test {public static void main(String[] args) {String str1 = "abcd";String str2 = "abcd";if(str1.equals(str2)){System.out.println(true);}else{System.out.println(false);}}
}
不区分大小写的比较
public class Test {public static void main(String[] args) {String str1 = "abcd";String str2 = "AbCd";if(str1.equalsIgnoreCase(str2)){System.out.println(true);}else{System.out.println(false);}}
}
比较两个字符串的大小
public class Test {public static void main(String[] args) {String str1 = "abcd";String str2 = "dsjkowjrd";System.out.println(str1.compareTo(str2));System.out.println(str1.compareToIgnoreCase(str2));}
}
字符串的查找
判断一个子字符串是否存在
public class Test {public static void main(String[] args) {String str1 = "halloworld";System.out.println(str1.contains("world"));}
}
查找指定字符串的位置
public class Test {public static void main(String[] args) {String str = "halloworld";System.out.println(str.indexOf("ow"));//从开始往后查找子字符串的位置System.out.println(str.indexOf("ow",3));//从指定位置开始往后查找子字符串的位置System.out.println(str.lastIndexOf("ow"));//从后往前查找子字符串的位置System.out.println(str.lastIndexOf("ow",7));//由指定位置从后往前查找子字符串的位置}
}
查找到了则返回子字符串的起始位置,没有查找到则返回 -1。
判断字符串是否以给定字符串开头
public class Test {public static void main(String[] args) {String str = "halloworld";System.out.println(str.startsWith("ha"));//从头开始判断字符串是否以该子字符串开头System.out.println(str.startsWith("ll",2));//从指定位置开始判断字符串是否以该子字符串开头}
}
判断字符串是否以给定字符串结尾
public class Test {public static void main(String[] args) {String str = "halloworld";System.out.println(str.endsWith("ld"));}
}
字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据
public class Test {public static void main(String[] args) {String str = "halloworld";String str1 = str.replaceAll("l","ww");//替换所有的指定内容System.out.println(str1);String str2 = str.replaceFirst("l","ww");//替换第一个出现的指定内容System.out.println(str2);}
}
由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串
字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
public class Test {public static void main(String[] args) {String str = "hallo world zhang san";String[] array = str.split(" ");//按照指定分隔符拆分成若干个子字符串for(String s : array){System.out.println(s);}String[] array1 = str.split(" ",2);//按照指定分隔符拆分成2个字符串for(String s : array1){System.out.println(s);}}
}
拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义。
例如拆分IP地址:
public class Test {public static void main(String[] args) {String str = "192.166.1.1";String[] array = str.split("\\.");for(String s : array){System.out.println(s);}}
}
注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上"\".
2. 而如果是"",那么就得写成"\\".
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符
字符串的截取
public class Test {public static void main(String[] args) {String str = "halloworld";String str1 = str.substring(5);//从指定位置截取到最后String str2 = str.substring(0,5);//截取一个范围的内容System.out.println(str1);System.out.println(str2);}
}
去除字符串左右空格保留中间空格
public class Test {public static void main(String[] args) {String str = " hallo world ";String str1 = str.trim();System.out.println(str1);}
}
字符串转大写
public class Test {public static void main(String[] args) {String str = "halloworld";String str1 = str.toUpperCase();System.out.println(str1);}
}
字符串转小写
public class Test {public static void main(String[] args) {String str = "HALLOworld";String str1 = str.toLowerCase();System.out.println(str1);}
}
字符串入池
public class Test {public static void main(String[] args) {String str = new String("halloworld").intern();}
}
字符串连接
public class Test {public static void main(String[] args) {String str = "hallo";String str1 = str.concat("world");System.out.println(str1);}
}
判断字符串是否为空
public class Test {public static void main(String[] args) {String str = "";System.out.println(str.isEmpty());}
}
空的意思是该字符串长度为0.