字符串在开发中的重要程度不言而喻,必会而且要精通,其中带来的好处只有自己才清楚。
一、创建字符串
- 创建一个空字符串
// 创建一个空字符串
String str1 = new String();
- 用一个字符数组创建一个字符串 String(char[] c)
char[] c = new char[] {'a','b','c','d','e','f','g'};
String str2 = new String(c);
System.out.println(str2);
3.提取字符数组中的一部分创建一个字符串对象 String(char[] c,int offset, int length)
// 3个参数的意思:(字符数组的名字,起始索引,长度)
char[] c2 = new char[] {'h','a','h','n','i','c','e','i','o','s'};
String str3 = new String(c2, 3, 4);
System.out.println(str3);
二、字符串的基本操作
- 连接字符串
String str4 = new String("Hello");
String str5 = new String("World!");
System.out.println(str4 + " " + str5);
- 字符串连接其他类型
// 25是数值类型的数据,在使用‘+’进行连接操作时,会将25转化为String类型 "25"
String str6 = new String("我今年");
System.out.println(str6 + 25 + "岁了!");
- 获取字符串的长度
// 值得注意的是,如果字符串中有空格,每一个空格也算作一个长度
int strLength = str6.length();
System.out.println(strLength);
- 获取指定字符的索引位置
// 有两个方法可以获取字符的索引,indexOf()和lastIndexOf()
String str7 = new String("haha,very interesting.");
// indexOf()方法取得第一次出现某个字符的位置
int firstIndex = str7.indexOf('v');
System.out.println("在str7中,字符‘V’第一次出现的位置索引为:" + firstIndex);
int lastIndex = str7.lastIndexOf('t');
System.out.println("在str7中,字符‘t’最后一次出现的位置索引为:" + lastIndex);
// 如果被搜索的字符串中没有这个字符,那么返回-1
int SearchIndex = str7.indexOf('b');
System.out.println(SearchIndex);
- 获取指定索引位置上的字符 charAt()
// 注意索引的大小,绝对不能大于字符串的长度-1,如果大于长度会报java.lang.StringIndexOutOfBoundsException异常
String str8 = new String("that's easy");
System.out.println(str8.charAt(4));
- 除去字符串的空格,2种方法,一种是除去字符串前部和尾部的空格,另一种是除去字符串中全部的空格
String str9 = " I'm fine. ";
// 除去前部和尾部的空格 str.trim();
System.out.println(str9.trim());
// 除去字符串中所有的空格
// StringTokenizer(String str, String delim) str表示要除去空格的字符串,delim表示从str中取出的字符
StringTokenizer st = new StringTokenizer(str9, " ");
StringBuffer sb = new StringBuffer(); // 定义字符串缓存对象
int i = 1;
while(st.hasMoreTokens()){
i++;
sb.append(st.nextToken()); // 向字符串生成器中追加内容
}
System.out.println("去掉所有空格后的str9:" + sb.toString());
// replaceAll()
String str10 = new String(" jk fld jkfd jfk jsdf");
str10 = str10.replaceAll(" ", "");
System.out.println(str10);
- 替换字符串
// 用一个新的字符串替换原来字符串的指定的子字符串 str.replace(String regex, String replacement)
String s = new String("bad bad study");
String s2 = s.replace("bad", "good");
System.out.println(s2);
// 如果只想替换第一个匹配的子字符串
String s3 = s.replaceFirst("bad", "good");
System.out.println(s3);
// 假如有要替换的字符串在原字符串有多个,可以使用for循环执行str.replaceFirst(strold, strnew);
- 判断字符串是否相等
// 2中方法,equals() 和 equalsIgnoreCase()
// equals() 严格区分大小写,在此情况下仍有相同的字符和长度时,结果为true,否则为false。
String s4 = new String("nice");
boolean result = s4.equals("nice");
System.out.println(result);
// equalsIgnoreCase() 在忽略大小写的情况下,如果仍有相同的字符和长度时,结果为true,否则为false。
String s5 = new String("NICE");
boolean result2 = s5.equalsIgnoreCase(s4);
System.out.println(result2);
// ==在比较字符串时,比较的是内存位置,不建议使用。在数值型中可以使用。
- 判断字符串是不是以指定的内容开始或者结尾
// 判断字符串是不是以 "abc" 开头
String s6 = new String("abcqweriop");
System.out.println(s6 + "是否以abc开头的字符串?" + s6.startsWith("abc"));
// 判断字符串是不是以 "op" 结尾
System.out.println(s6 + "是否以op结尾的字符串?" + s6.endsWith("op"));
- 字母大小写转换
String s7 = new String("HfdkDRTvcC");
// 全部转为小写
System.out.println(s7 + "全部转换为小写字母:" + s7.toLowerCase());
// 全部转为大写
System.out.println(s7 + "全部转换为大写字母:" + s7.toUpperCase());
// 以上两个方法在转换时,对字符串中的数字和其他字符不做改变
- 分割字符串 str.split(String s);
// 用s来分割str,别把分割后的结果返回一个字符串数组
String s8 = new String("qwe,rty,uio,p[]");
String[] sArr = s8.split(",");
for (String ss : sArr) {
System.out.print(ss);
}
System.out.println();
// split()的另外一种重载
// str.split(String sign, int limit); sign为分隔符,limit为拆分的份数
// 例如,分割为2份,只去掉一个‘,’。分割为3份,去掉2个‘,’
String[] strLimit = s8.split(",", 2);
for (String ss : strLimit) {
System.out.print(ss);
}