字符串基础
- 字符串常量:
需要使用“ ”双引号包裹起来
“ 12435” “asdhskdfgb” "我爱你,中国"
一个字符串不能放在多行,如果要过表示换行可以在字符串中间添加\n,来表示换行
字符串变量:
String str =“asdfa”;
String str = new String("dfasdg");
String str = new String(byteArray);
String str = new String(charArray);
字符串的特点:
- 字符串的内容永不可变,所以字符串是可以共享使用的
- 正因为字符串不可以改变,所以字符串是可以共享使用的
- 字符串效果上相当于是一个char[]字符数组,但是底层原理是byte[]字节数组
- new出来的字符串直接在堆当中,直接赋值的字符串在堆中的字符串常量池中
字符串连接(+):
- 多个字符串连接
public String concat(String str)
将当前字符串和参数字符串拼接为一个新的字符串并返回
- 和其他数据连接
- 通过+可以直接对字符串(或者其他数据类型)常量和变量做连接操作
- 多个字符串连接
字符串的特性:
- 字符串无法被修改
- 字符串的值无法被修改,但是字符串对象可以引用别的字符串。
字符串信息获取:
长度:
s.length();
查找子字符串的位置:
s.indexOf(int c);
s.indexOf(String str);
s.lastIndexOf(String str);
获取指定位置的字符:
s.charAt(int index);
获取子字符串:(如不给定beginIndex则默认从0开始,到endIndex的前一个字符)
s.subString(int beginIndex);
s.subString(int beginIndex,int endIndex);
字符串判断;
- 判断字符串的开始和结尾:
s.startsWith(Stirng prefix);
s.endsWith(String suffix);
- 判断字符串是否相等:
==
s.equals(String str);
s.equalsIgnoreCase(String str);
s.compareTo(String str);
- compareTo比较的不是字符串是否相等,这里比较的是字符串的大小,字符串的大小怎么比较呢?按各个字符比较相同的字符跳过,遇到不同的字符,返回字符的差(Ascll码值 ),如果两个字符串,前面的几个字符相等,长度不相等(“”siki”,”sikiedu”)返回两个字符串的长度差。(常用于排序)
- 判断是否包含某个字符串,包含返回true
s.contains(String str);
- 判断字符串是否为空
s.isEmpty();
- 空的两种状态:
String s = "";
空字符串String s = null;
空对象
- 判断字符串的开始和结尾:
字符串转换操作:
- 字母大小写转换
s.toLowerCase();
s.toUpperCase();
- 字符串分割(返回的是一个字符串数组,limit可以控制字符串数组中的元素个数)
s.split(String str);
s.split(String str,int limit);
- 去除空格(前面和后面的空格,不包括中间的空格)
s.trim()
- 字符串替换
s.replace(char oldChar,char new Char);
s.replace(String oldStr,String newStr);
- 字符串格式化(日期和时间的格式化)
- 在 Java中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换
- 字母大小写转换
将一个字符串翻转:
通过String类的charAt()的方法来获取字符串中的每一个字符,然后将其拼接为一个新的字符串。
1
2
3
4
5
6
7public static String CharAtreverse(String s) {
int length = s.length();
String reverse = "";
for (int i=0; i<length; i++)
reverse = s.charAt(i) + reverse;
return reverse;
}通过String的toCharArray()方法可以获得字符串中的每一个字符串并转换为字符数组,然后用一个空的字符串从后向前一个个的拼接成新的字符串。
1
2
3
4
5
6
7
8
9
public static String reverseCharArray(String s) {
char[] array = s.toCharArray();
String reverse = "";
for (int i = array.length - 1; i >= 0; i--) {
reverse += array[i];
}
return reverse;
}通过StringBuilder的reverse()方法,最快的方式
1
2
3
4
5public static String reverseStringBuilder(String s) {
StringBuilder sb = new StringBuilder(s);
String afterreverse = sb.reverse().toString();
return afterreverse;
}
String和StringBuilder和StringBuffer
1、在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。
2、在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String”+”来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。
3、在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。