一 创建字符串
在Java语言中将字符串作为对象来管理,因此可以向创建其他类对象一样来创建字符串。
创建字符串
- 用一个数组创建String对象: String(char a[]);
例如: char a [] = {‘g’,’o’,’o’,’d’};
String str = new String(a);
等价于 String str = new String(“good”);
- 提取字符数组中一部分来创建String对象:String (char a[], int offset, int length),其中offset代表提取数组的开始位置,length代表生成的字符串的长度。
例如: char a[] = {‘s’,’t’,’u’,’d’,’e’,’n’,’t’};
String str = new String(a,2,4);
等价于 String str = new String(“uden”);
- 通过字符串常量的引用赋值给字符串一个变量;
例如: String str = “12131”;
二 StringAPI操作
// 定义一个字符串变量;
String str = "DADSqewqe123fdss";
/*
* StringAPI说明
*/
/*
* 1. length(),获取字符串长度;且注意:此方法返回的长度包括字符串中的空格;
*/
int length = str.length();
System.out.println("str字符串的长度是"+length);
// 输出结果: str字符串的长度是16
/*
* 2. indexOf(String s),该方法用于参数字符串s,在指定的字符串首次出现的位置;当调用该方法时,
* 会从当前字符串开始位置进行搜索,找到,返回下标,否则,返回-1.
*/
int index = str.indexOf("q");
System.out.println("字符串q首次出现的位置是:"+index);
// 输出结果:字符串q首次出现的位置是:4
/*
* 3. lastIndexOf(String s),该方法用于参数字符串s,在指定的字符串最后一次出现的位置;当调用该方法时,
* 会从当前字符串开始位置进行搜索,找到,返回下标,否则,返回-1.
*/
int lastIndex = str.indexOf("e");
System.out.println("字符串e最后一次出现的位置是:"+lastIndex);
// 输出结果:字符串e最后一次出现的位置是:5
/*
* 4. charAt(int index), 该方法用于返回当前字符串指定索引的字符。
*/
char c = str.charAt(3);
System.out.println("当前字符串索引为3时对应的字符是:"+c);
// 输出结果:当前字符串索引为3时对应的字符是:S
/*
* 5.substring(int beginIndex),该方法表示从指定索引位置开始,直到截取到字符串结尾的子字符串。
* beginIndex 表示指定开始的索引位置。
*/
String bstr = str.substring(6);
System.out.println("截取的字符串是"+bstr);
// 输出结果:截取的字符串是wqe123fdss
/*
* 6.substring(int beginIndex,int endIndex),该方法表示从指定索引位置开始,直到截取到指定索引位置结束的子字符串。
* beginIndex 表示开始索引,endIndex 表示截至索引。
*/
String bestr = str.substring(7, 13);
System.out.println("截取的字符串是"+bestr);
// 输出结果:截取的字符串是qe123f
/*
* 7. trim(),该方法用于去除字符串中的前导空格和尾部空格;
*/
String str1 = " dsewerwewe ";
String str2 = str1.trim();
System.out.println("去除空格前的字符串长度是"+str1.length());
System.out.println("去除空格后的字符串长度是"+str2.length());
// 输出结果:去除空格前的字符串长度是12
// 去除空格后的字符串长度是10
/*
* 8. replace(char oldChar,char newChar); 该方法用于替换当前字符串中的字符或字符串。 oldChar 表示旧的字符或字符串 ;
* newChar 表示新的字符或字符串;该方法返回新的字符串,但当oldChar在原有字符串中不存在时,则返回原字符串。
*/
String newStr = str.replace('e', 'c');
System.out.println("替换前的字符串是:"+str);
System.out.println("替换后的字符串是:"+newStr);
// 输出结果:替换前的字符串是:DADSqewqe123fdss
// 替换后的字符串是:DADSqcwqc123fdss
/*
* 9. startsWith()和endsWith(); 分别用于判断字符串是否以指定内容开始或结束,返回boolean;
*/
boolean b = str.startsWith("DA");
boolean b1 = str.endsWith("jj");
System.out.println("字符串str是否以DA开始的"+b);
System.out.println("字符串str是否以jj结束的"+b1);
// 输出结果:字符串str是否以DA开始的true
// 字符串str是否以jj结束的false
/*
* 10. 判断两个字符串是否相等;
* 注意:判断两个字符串是否相等,不能用比较运算符 ==, 因为比较运算符比较的是两个字符串的地址是否相同,即使两个字符串的内容相同,但存储的内存地址不同,同样会返回false;
* 判断两个字符串是否相等,要使用equals()和equalsIgnoreCase();他们之间的区别是:
* 区别: equals在比较时是区分大小写的,而equalsIgnoreCase()在比较时是忽略大小写的。
*
*/
String eq1str = "ASDfg";
String eq2str = "ASDfg";
String eq3str = "asdFG";
boolean eqb1 = eq1str.equals(eq2str);
boolean eqb2 = eq1str.equals(eq3str);
boolean eqb3 = eq1str.equalsIgnoreCase(eq2str);
boolean eqb4 = eq1str.equalsIgnoreCase(eq3str);
System.out.println("使用equals方法判断字符串eq1str与字符串eq2str是否相等"+eqb1);
System.out.println("使用equals方法判断字符串eq1str与字符串eq3str是否相等"+eqb2);
System.out.println("---------------------------------");
System.out.println("使用equalsIgnoreCase方法判断字符串eq1str与字符串eq2str是否相等"+eqb3);
System.out.println("使用equalsIgnoreCase方法判断字符串eq1str与字符串eq3str是否相等"+eqb4);
/*
* 输出结果:
* 使用equals方法判断字符串eq1str与字符串eq2str是否相等true
使用equals方法判断字符串eq1str与字符串eq3str是否相等false
---------------------------------
使用equalsIgnoreCase方法判断字符串eq1str与字符串eq2str是否相等true
使用equalsIgnoreCase方法判断字符串eq1str与字符串eq3str是否相等true
*/
/*
* 11. cpmpareTo(); 该方法用于按照字典顺序比较两个字符串,该比较基于字符串中每个字符的unicode值,按照字典顺序将此S听对象表示的字符序列
* 与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数,如果按字典顺序此String对
* 象位于参数字符串之后,则返回一个正整数,如果两个字符串相等,则返回0.
* 注意: compareTo()只有在equals方法返回true时,才返回0.
*/
String c1str = "acd";
String c2str = "bca";
String c3str = "abc";
String c4str = "acb";
System.out.println("c1str compareTo c2str 返回"+c1str.compareTo(c2str));
System.out.println("c1str compareTo c3str 返回"+c1str.compareTo(c3str));
System.out.println("c1str compareTo c4str 返回"+c1str.compareTo(c4str));
/*
* 输出结果:
* c1str compareTo c2str 返回-1
c1str compareTo c3str 返回1
c1str compareTo c4str 返回2
根据返回结果可以看出,该方法是从左到右依次进行比较的。
*/
/*
* 12.字母大小写转换
* toLowerCase();将字符串中所有大写字符转换成小写
* toUpperCase();将字符串中所有小写字符转换成大写
* 注意:使用toLowerCase(),toUpperCase()转换时,数字与非字符不受影响。
*/
String toStr = "abc DEF";
String to1Str = toStr.toLowerCase();
String to2Str = toStr.toUpperCase();
System.out.println("字符串toStr调用toLowerCase()转换后得"+to1Str);
System.out.println("字符串toStr调用toUpperCase()转换后得"+to2Str);
/*
* 输出结果:
* 字符串toStr调用toLowerCase()转换后得abc def
字符串toStr调用toUpperCase()转换后得ABC DEF
*/
/*
* 13.split();该方法用于对字符串按指定分割字符或分割字符串进行分割,并将分割后的结果存放到字符串数组中。
* 字符串分割有两种分割方式:
* 1.split(String sign); 根据给定的分割符进行分割,sign是给定的分割符,也可以是正则表达式。
* 注意:没有统一的对字符串分割的分割符,如果想定义多个分割符,可以使用符号"|",例如: ",|=",表示分割符分别是","和"=".
* 2.split(String sign,int limit); 根据给定的分割符对字符串进行拆分,并限定拆分的次数。
* sign 指定的分割符, limit 要拆分的次数。
*/
String ip = "192.168.0.1";
String ip1s[] = ip.split("\\.");
String ip2s[] = ip.split("\\.", 2);
System.out.println("ip 的原值为 : ["+ip+"]");
System.out.print("全部拆分的结果为:");
for (String s : ip1s) {
System.out.print("["+s+"]");
}
System.out.println();
System.out.print("拆分两次的结果为:");
for (String s : ip2s) {
System.out.print("["+s+"]");
}
/*
* 输出结果:ip 的原值为 : [192.168.0.1]
全部拆分的结果为:[192][168][0][1]
拆分两次的结果为:[192][168.0.1]
*/
/*
* 14. contains(),该方法用于判断一个字符串中是否包含另一个字符串
*/
String s = "DAD";
boolean bc = str.contains(s);
System.out.println("字符串str中是否包含字符串s:"+bc);
// 输出结果:
/*
* 15.getBytes();该方法用于将字符串转换成字节数组;
*/
byte[] strs = str.getBytes();
for (byte d : strs) {
System.out.print(d+",");
}
System.out.println();
// 输出结果:68,65,68,83,113,101,119,113,101,49,50,51,102,100,115,115,
/*
* 16.toCharArray;该方法用于将字符串转换成字节数组;
*/
char[] chars = str.toCharArray();
for (char cr : chars) {
System.out.print(cr+",");
}
// 输出结果:D,A,D,S,q,e,w,q,e,1,2,3,f,d,s,s,
/*
* 17 . isEmpty();判断字符串是否为空;
*/