String
String
类是不可改变的,所以你一旦创建了String
对象,那它的值就无法改变了。 如果需要对字符串做很多修改,那么应该选择使用StringBuffer
&StringBuilder
类。
这句话的理解:
Java中字符串类型String是不允许改变其内容的,那么请问简要谈谈下列语句是如何运行的:String s=new String(“ABC”); s=s+“abc”;
确实,Java中的String类型确实是不允许改变其内容的,String类型的对象一旦建立,将在堆内存当中占据一个固定的内存空间,String类型的对象无法改变。但是你在运算的时候又发现,你定义的String类型的s变量又是可以进行连接的,如"abc"+“def"最终得到的s的值是"abcdef”,这似乎看着String类型的对象又是可以改变的,这是自相矛盾吗?其实,String对象不允许改变内容是正确的,但是可以改变定义的String类型的变量指向,你定义的String s其实是一个指向String对象的指针,如果不存在对象就为null。如果你定义了:String s=“abc”;那么将创建一个内容为"abc"的String对象,并且s指向这个对象。一旦s=s+“abc”;这样的操作,那么将创建一个新的String对象来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有Java虚拟机回收。如果希望存放的String可以调整大小,而不是创建新的内存来存放新的对象,可以使用StringBuffer这个类来存放。这个内存可以调整大小。而不会抛弃。
实例:
public static void main(String[] args) { String s=new String("ABC"); s=s+"abc"; System.out.println(s); }
在此我为大家列出了一个大纲,通过大纲和目录,可以快速定位到想要使用的方法
方法 | 说明 |
int length() | 返回当前字符串长度 |
char charAt( int index) | 获取字符串中指定位置的字符 |
char toCharArray() | 将字符串转为 char 数组类型。 |
int indexOf( int ch) | 查找ch字符在该字符串中第一次出现的位置 |
String.lastIndexOf(String str) | 得到str最后一次出现的位置 |
toUpperCase(),toLowerCase() | 字符串大小写转换 |
String[ ] split(String regex ,int limit) | 去除字符串中指定的的字符,然后返回一个新的字符串 |
boolean equals(Object anObject) | 字符串比较 |
String trim() | 去除字符串两端空格 |
String replace(char oldChar,char newChar) | 字符串替换 |
String substring(int beginIndex,int endIndex) | 截取字符串 |
boolean equalsIgnoreCase(String str) | 忽略大小写对字符串进行比较 |
boolean contains(String str) | 判断一个字符串里面是否包含指定的内容 |
boolean startsWith(String str) | 是否以指定的前缀开始 |
boolean endsWith(String str) | 是否以指定的后缀结束 |
String replaceAll(String str1,String str2) | 将某个内容全部替换成指定内容 |
String repalceFirst(String str1,String str2) | 将第一次出现的某个内容替换成指定的内容 |
String concat(String str) | 在原有的字符串的基础上加上指定字符串 |
boolean isEmpty() | 非空判断 |
int length()
- 语法:
字符串变量名.length();
- 说明: 返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度)
- 示例:
public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; System.out.print(test.length()); }
结果:
char charAt( int index)
- 语法:
字符串名.charAt(值);
- 说明: 返回值为 char 类型。从字符串中取出指定位置的字符
- 示例:
public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; System.out.print("指定字符为:"+test.charAt(4)); }
结果:
char toCharArray()
- 语法:
字符串名.toCharArray();
- 说明: 返回值为 char 数组类型。将字符串变成一个字符数组
- 示例:
public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; char[] chars = test.toCharArray(); for (int i=0;i<chars.length;i++){ System.out.println(chars[i]); } }
结果:
int indexOf( int ch)
- 语法 :
字符串名.indexOf("字符");
,字符串名.indexOf("字符",值);
- 1个入参,说明: 查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。
- 2个入参,说明 : 从指定位置开始查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。
- 示例:
// 1 public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; System.out.println(test.indexOf("位")); } // 2 public static void main(String[] args) { //查找一个字符是否存在,存在返回下标,不存在返回 -1 String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; System.out.println(test.indexOf("@",19)); }
- 结果:
String.lastIndexOf(String str)
- 语法:
字符串名.lastIndexOf("字符")
- 说明: 得到指定内容最后一次出现的下标。
- 示例:
public static void main(String[] args) { //查找一个字符是否存在,存在返回下标,不存在返回 -1 String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; System.out.println(test.lastIndexOf("@")); }
结果:
toUpperCase(),toLowerCase()
- 语法:
字符串名.toUpperCase()
,字符串名.toLowerCase()
- 说明: 字符串大小写的转换
- 示例:
public static void main(String[] args) { String str="hello world"; System.out.println("将字符串转大写为:" + str.toUpperCase()); System.out.println("将字符串转换成小写为:" + str.toUpperCase().toLowerCase()); }
结果:
String[ ] split(String regex ,int limit)
语法: String[] split("字符") String[] split(String regex ,int limit)
String[] split("字符") 说明: 根据给定的正则表达式的匹配来拆分此字符串。
String[] split(String regex ,int limit)说明: 若limit参数大于等于这个length或limit参数为非正数,则字符串以regex方式进行最大split;若limit参数处于0和length之间,则字符串以regex方式进行limit - 1次split,split后剩下的字符不会再进行split。
示例:
// String[] split("字符") public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; String[] split = test.split("@"); for (int i =0;i<split.length;i++){ System.out.println(split[i]); } } //String[] split(String regex ,int limit) public static void main(String[] args) { String test = "我是Cs挽周,请官方给我个热榜,@@占位符@@谢谢了"; String[] split = test.split("@",2); for (int i =0;i<split.length;i++){ System.out.println(split[i]); } }
- 结果: