文章目录
⭐字符串构造
3种构造方式
String str1="hello";
String str2=new String("abc");
char[] chars={'x','y','z'};
String str3=new String(chars);//数组转字符串
String类有两个成员:value[],hash。
Java中的字符串没有’\0’。
求字符串长度:
.length()
System.out.println(s1.length());
System.out.println("hello".length());
⭐比较两个字符串是否相等
🎈equals()
常见错误:
String s1 = new String("hello");
String s2 = new String("Hello");
System.out.println(s1==s2);
false
s1和s2这两个引用存的是地址,比较的是地址而不是内容
正确的比较方法:
System.out.println(s1.equals(s2));
String类重写了Object类的.equals()。
🎈equalsIgnoreCase()
忽略大小写进行比较
System.out.println(s1.equalsIgnoreCase(s2));
⭐比较两个字符串的大小
🎈compareTo()
String s1 = new String("hello");
String s2 = new String("aello");
int ret=s1.compareTo(s2);
if(ret>0){
System.out.println("s1>s2");
}else if(ret==0){
System.out.println("s1=s2");
}else {
System.out.println("s1<s2");
}
🎈compareToIgnoreCase()
也可以忽略大小写进行比较
int ret=s1.compareToIgnoreCase(s2);
⭐字符串查找
🎈charAt()
用下标访问字符串的每一个字符
String str="abcdef";
for (int i = 0; i < str.length(); i++) {
char ch=str.charAt(i);
System.out.println(ch);
}
🎈indexOf()
从头开始找遇到第一个就返回其下标
System.out.println(str.indexOf('c'));
也可以指定查找的起点
System.out.println(str.indexOf('c',3));
//从3下标开始找'c'
查找字符串的子串
System.out.println(str.indexOf("abc"));
//返回'a'的下标
//也能指定查找的起点
System.out.println(str.indexOf("abc",4));
🎈lastIndexOf()
System.out.println(str.lastIndexOf('c'));
从后往前找遇到第一个返回其下标
//也能指定查找的起点
System.out.println(str.lastIndexOf('c',4));
//也能找字符串
System.out.println(str.lastIndexOf("abc"));
System.out.println(str.lastIndexOf("abc",3));
如果找不到:返回-1
String str="ababcabcd";
System.out.println(str.lastIndexOf("abc",3));
2
⭐关于String[] args
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
运行结果为空。
我们需要对args数组传参数,通过命令行来传。
⭐转化
🎈数值和字符串之间的转换
🔥valueOf()
//整数转字符串
String str=String.valueOf(123);
System.out.println(str);
//布尔类型转字符串
String str2=String.valueOf(true);
学生类转字符串
class Student{
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
String s4 = String.valueOf(new Student("Hanmeimei", 18));
Student{name='Hanmeimei', age=18}
🔥parseInt()
int val=Integer.parseInt("123");
int val=Integer.valueOf("123");
double val2=Double.parseDouble("12.25");
🎈大小写转换
🔥toUpperCase()
小写转大写
//只认小写字母,不是小写字母不操作
String str="helloGT高";
String ret=str.toUpperCase();
🔥toLowerCase()
大写转小写
String str2="ABCDEFG";
String ret2=str2.toLowerCase();
注意:字符串中的库函数都是返回新字符串,不在原字符串上修改
🎈字符串转数组
🔥toCharArray()
char[] chars=str2.toCharArray();
System.out.println(Arrays.toString(chars));
🎈格式化
🔥format()
String ret3=String.format("%d,%d,%d",2012,12,12);
System.out.println(ret3);
2012,12,12
⭐字符串替换
🎈replace()
🔥replace(char oldChar,char newChar)
pbpbcpbcdpbcdef
🔥replace(CharSequence target,CharSequence replacement)
pkpkcpkcdpkcdef
🔥replaceAll()
String ret=str1.replaceAll("abc","pkrg");
System.out.println(ret);
abpkrgpkrgdpkrgdef
🔥replaceFirst()
String ret3=str1.replaceFirst("abc","pkrg");
System.out.println(ret3);
abpkrgabcdabcdef
⭐字符串拆分
🎈split()
返回字符串数组
🔥String[] split(String regex)
String str="zhangsan&wangwu&lisi&zhaoliu";
String[] ret=str.split("&");
System.out.println(Arrays.toString(ret));
[zhangsan, wangwu, lisi, zhaoliu]
🔥String[] split(String regex, int limit)
拆分成limit组
String[] ret=str.split("&",2); System.out.println(Arrays.toString(ret));
[zhangsan, wangwu&lisi&zhaoliu]
一个例子
String str2="127.0.0.1";
String[] ret2=str2.split("\\.");
for (String x:ret2) {
System.out.println(x);
}
127
0
0
1
String str3="127\\0\\0\\1";
String[] ret3=str3.split("\\\\");
for (String x:ret3) {
System.out.println(x);
}
127
0
0
1
String str3="127\\0\\0\\1";
String[] ret4=str3.split("/");
for (String x:ret4) {
System.out.println(x);
}
127\0\0\1
//没有分割
多种分隔符的情况:两个分隔符用’|'连接
String str4="name=zhangsan&age=18";
String[] ret5=str4.split("=|&");
for (String x:ret5) {
System.out.println(x);
}
name
zhangsan
age
18
多次拆分:
String str4="name=zhangsan&age=18";
String[] ret5=str4.split("&");
for (String x:ret5) {
String[] ss=x.split("=");
for (String s:ss) {
System.out.println(s);
}
}
name
zhangsan
age
18
⭐字符串截取
🎈substring()
String str="helloworld";
String ret=str.substring(1);
System.out.println(ret);
String ret1=str.substring(1,4);//[1,4)
System.out.println(ret1);
elloworld
ell
⭐去掉空格
🎈trim()
去掉字符串左右两边的空格
String str=" hello hello ";
String ret=str.trim();
//System.out.print(str);
System.out.print(ret);
System.out.println("ppppp");
hello helloppppp
⭐判断是否包含子串
🎈contains()
String str=" hello hello ";
Boolean flg=str.contains("hello");
System.out.println(flg);
true
⭐判断是否以某字符串结尾
🎈endsWith()
String str ="abcabcdabcdef";
System.out.println(str.endsWith("cdef9"));
System.out.println(str.startsWith("abc"));
false
true
⭐字符串常量池
底层是一个StringTable的哈希表。
String str1="abcd";
String str2="abcd";
String str3=new String("abcd");
String str4=new String("abcd");
System.out.println(str1==str2);
System.out.println(str3==str4);
System.out.println(str1==str3);
true
false
false
public static void main(String[] args) {
String str1="abc"+"def";
}
str1在编译阶段就是"abcdef"
⭐intern方法
手动将创建的String对象添加到常量池中。
char[] ch = new char[]{'a', 'b', 'c'};
String s1 = new String(ch);
//s1.intern();
String s2 = "abc";
System.out.println(s1 == s2);
不加s1.intern(); 输出false
加了之后输出true
⭐字符串的不可变性
⭐字符串修改
long start = System.currentTimeMillis();
String s = "";
for(int i = 0; i < 100; ++i)
{
s += i; //每次都会产生新的字符串,不会在原字符串上修改
}
long end = System.currentTimeMillis();
System.out.println(end - start);
⭐StringBuilder
🎈reverse()
StringBuilder stringBuilder=new StringBuilder("hello");
stringBuilder.reverse();
System.out.println(stringBuilder);
olleh
String==》StringBuilder:调用StringBuilder的构造方法或StringBuilder.append()。
StringBuilder==》String:StringBuilder.toString()。
⭐StringBuilder和StringBuffer的区别
本文含有隐藏内容,请 开通VIP 后查看