1.String是引用数据类型
2.采用数组进行存储
JDK8——char[ ] 字符数组
JDK9——byte[ ] 字节数组
1.String str1 = " dfsg3455 “;在字符串池中存储
2.String str2 = new String(” shwy987 ");
3.String str3 = new String(字符数组);
后两者在堆区中开辟空间存储
public static void main(String[] args) {
// 方式1
// 在字符串池中创建
String str1 = "just so so";
String str2 = "just so so";
str2 = "just do it"; // str2重新指向了新的字符串地址
// 方式2
// 在堆中开辟空间,创建并保存字符串
String str3 = new String("just go go");
// 方式3
// 将字符数组,转换成字符串
char[] chs = {
'g','o','g','o','!'};
String str4 = new String(chs);
System.out.println(str4);
}
作用:将指定的其他类型数据转换为字符串
传入:需要转换的其他类型的数据
有
int | float | double | boolean | char[ ]数组 |
---|---|---|---|---|
整型 | 单精度浮点型 | 双精度浮点型 | 布尔型 | 字符数组 |
返回:转换后的字符串
public static void main(String[] args) {
// 方法:String.valueOf()
// 将指定类型转换为字符串类型
// int => String
String strInt = String.valueOf(123);
System.out.println(strInt);
// double => String
String strDouble = String.valueOf(15.98);
System.out.println(strDouble);
// boolean => String
String strBoolean = String.valueOf(true);
System.out.println(strBoolean);
char[] array = {
65, 66, 67, 68, 69 };
String strArray = String.valueOf(array);
System.out.println(strArray);
}
作用:按照指定的格式字符串( “%d-%s-%f” ),创建生成新字符串
传入:(1)参数1:格式字符串 (2)动态参数值(依次按占位符的位置传入对应的值)
返回:按照格式,产生的新字符串
public static void main(String[] args) {
// 方法: String.format()格式化字符串
// 案例1
int num1 = 15, num2 = 30;
int sum = num1 + num2;
// 格式化输出
System.out.printf("%d+%d=%d\n", num1, num2, sum);
// 格式化字符串
String str = String.format("%d+%d=%d", num1, num2, sum);
System.out.println(str);
// 案例2
// xxxx年xx月
String now1 = LocalDate.now().getYear() + "年" + LocalDate.now().getMonthValue() + "月";
String now2 = String.format("%s年%s月", LocalDate.now().getYear(), LocalDate.now().getMonthValue());
System.out.println(now2);
// xx月xx日
String now3 = String.format("%s月%s日", LocalDate.now().getMonth(), LocalDate.now().getDayOfMonth());
System.out.println(now3);
}
作用:按照指定的下标位置,获取对应的字符
传入:下标位置(下标位置不能越界)
返回:该下标位置对应的字符
public static void main(String[] args) {
// 方法: charAt(下标位置)
// 功能:返回该下标位置对应的字符
String str1 = "ABCD";
System.out.println(str1.charAt(0)); //A
String str2 = "CDAA";
System.out.println(str2.charAt(0)); //C
}
作用:将当前字符串转换为字符数组
传入:无
返回:该字符串对应的字符数组
public static void main(String[] args) {
// 方法:toCharArray()
// 功能:返回该字符串中的字符数组
String str3 = "我与夏风皆过客";
char[] chs = str3.toCharArray();
System.out.println(chs[4]);//皆
System.out.println(chs[2]);//夏
}
作用:按照指定的字符或者字符串,对原字符串进行切割
传入:指定字符串(进行切割的格式)。指定字符串中如果包含特殊字符(正则表达式),需要使用 \进行转义
返回:字符串数组,包含切割后的每个子字符串
public static void main(String[] args) {
// 方法:split(指定字符串)
// 功能:按照指定字符串进行切割,返回字符串数组
// 案例1
String sourceStr = "南京!-上海!-广州!-西安!-重庆";
String[] resultArray = sourceStr.split("!-");
for (String city : resultArray) {
System.out.println(city);
}
// 案例2
sourceStr = "风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。";
String[] resultArray01 = sourceStr.split("。");
String[] resultArray011 = resultArray01[0].split(",");
String[] resultArray012 = resultArray01[1].split(",");
resultArray01 = new String[4];
System.arraycopy(resultArray011, 0, resultArray01, 0, 2);
System.arraycopy(resultArray012, 0, resultArray01, 2, 2);
System.out.println(Arrays.toString(resultArray01));
// 案例3
String ip = "154.368.59.423";
// 切割字符串如果是特殊符号(正则表达式),需加入\\进行转义
String[] ipArray = ip.split("\\.");
for(String strNum : ipArray) {
System.out.println(strNum);
}
// 案例4
sourceStr = "南京#$上海#$广州#$西安#$重庆";
// 切割字符串如果是特殊符号(正则表达式),需加入\\进行转义
String[] cityArray = sourceStr.split("#\\$");
for(String cityName : cityArray) {
System.out.println(cityName);
}
}
作用:截取字符串中的子字符串
传入:截取的开始位置下标和结束位置下标
返回:截取后的子字符串
public static void main(String[] args) {
// 方法.substring()
// 功能:截取子字符串
// 返回:截取后的子字符串
fileName = "weweweweweok.apk";
int beginPos = fileName.indexOf("."); // 查找.的位置
// 案例1:截取后缀名
// 从指定开始位置,截取至字符串的尾部(截取后缀名)
String suffix = fileName.substring(beginPos);
System.out.printf("%s的后缀名是%s\n", fileName, suffix);
// 案例2:截取文件名
// 从指定开始位置,截取至指定结束位置(截取文件名)
String name = fileName.substring(0, beginPos);
System.out.printf("%s的文件名是%s\n", fileName, name);
}
作用:比较两个字符串之间的大小
比较规则:比较两个字符串对应字符 ASCII码(英文)或Unicode码(中文)的"差"
传入:需要比较的另外一个字符串
返回:结果为正数(大于0) 代表:字符串1 > 字符串2
结果为负数(小于0) 代表:字符串1 < 字符串2
结果为0 代表:字符串1 = 字符串2
public static void main(String[] args) {
// 方法:compareTo()
// 功能:比较两个字符串之间的大小
String str1 ="sdfgx";
String str2 ="dfghjj";
System.out.println(str1.compareTo(str2));
String str3 ="区分";
String str4 ="字符串";
System.out.println(str3.compareTo(str4));
}
作用:equals( ) 比较字符串内容是否一致,区分大小写
equalsIgnoreCase( ) 比较字符串内容是否一致,不区分大小写
传入:需要比较的另外一个字符串
返回:true:代表两个字符串内容一致
false:代表两个字符串内容不一致
public static void main(String[] args) {
// 方法:equals()、equalsIgnoreCase()
// 功能:比较两个字符串的值是否相等
String str1 = "string";
String str2 = "STRING";
System.out.println(str1.equals(str2));//false
System.out.println(str1.equalsIgnoreCase(str2));//true
}
作用:判断字符串是否包含指定子字符串
传入:子字符串
返回:true:代表包含
false:代表不包含
public static void main(String[] args) {
// 方法:contains(子字符串)
// 功能:判断字符串是否包含指定子字符串
String str1 = "ABABABASOSOASB";
System.out.println(str1.contains("soso"));//false
System.out.println(str1.contains("BA"));//true
String source = "SDKLSKDJFJSIODFOISDJFOJSDFJLSDF";
String world = "timi";//false
System.out.println(source.contains(world));//false
}
作用:查找指定子字符串
indexOf( )查找第一个出现的子字符串
lastIndexOf( )查找最后一个出现的子字符串
传入:子字符串
返回:如果找到,则返回子字符串位置;如果没找到返回负数
public static void main(String[] args) {
// 方法:indexOf(子字符串)
// 功能:查找指定子字符串
// 返回结果:如果找到,则返回子字符串位置;如果没找到返回负数
// 案例1
String data1 = "gshf#sj342#8fhjsk#";
int pos1 = data1.indexOf("#"); // 从下标0开始查找
System.out.println(pos1); // 4
int pos2 = data1.indexOf("#", 5); // 从下标5开始查找
System.out.println(pos2); // 10
int pos3 = data1.lastIndexOf("#"); // 从下标length-1开始查找
System.out.println(pos3); // 17
//案例3
String str1 = "ABCDECDFG";
// 查找第一个出现的子字符串
int pos1 = str1.indexOf("CD");
System.out.println(pos1);
// 查找最后一个出现的子字符串
int pos2 = str1.lastIndexOf("CD");
System.out.println(pos2);
// 案例2 : 判断email邮箱地址中,是否包含@,并且@的位置不在首位或尾部
String email01 = "billgmail.@com"; // 正常
// String email02 = "@billgmail.com"; //错误
// String email03 = "billgmail.com@"; //错误
// String email03 = "billgmail.com"; //错误
int pos = email01.indexOf("@");
System.out.println(pos);
if (pos == 0 || pos == email01.length() - 1 || pos < 0) {
System.out.println("邮箱格式有误");
} else {
System.out.println("邮箱正常");
}
}
作用:replace( )将指定子字符串替换(全部替换)
replaceFirst( )替换字符串中出现的第一个子字符串
传入:要替换的子字符串和新的字符串
返回:替换后的新字符串
public static void main(String[] args) {
// replace()
// 功能:将指定子字符串替换
// 返回:替换后的新字符串
// 案例:替换标点符号
String content = "风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。";
content = content.replace(",", "!").replace("。", "!");
System.out.println(content);
// replaceFirst( )
String src =""+""+"";
src = src.replaceFirst(".com", ".png");
System.out.println(src);
}
作用:判断字符串是否以指定子字符串"开头"
传入:指定子字符串
返回:true:代表是
false:代表不是
public static void main(String[] args) {
// 方法:startsWith(子字符串)
// 功能:判断字符串是否以指定子字符串"开头"
String url = "ftp://www.baidu.com";
System.out.println(url.startsWith("ftp"));//true
}
作用:判断字符串是否以指定子字符串"结尾"
传入:指定子字符串
返回:true:代表是
false:代表不是
public static void main(String[] args) {
// 方法:endsWith(子字符串)
// 功能:判断字符串是否以指定子字符串"结尾"
String fileName = "weixin.docx";
System.out.println(fileName.endsWith(".png"));//false
}
作用:小写转换成大写
传入:无
返回:新的字符串
public static void main(String[] args) {
// toUpperCase()
// 功能:小写转换成大写
String str = "shbxhdjc";
str1 = str.toUpperCase();
System.out.println(str1);
}
作用:大写转换成小写
传入:无
返回:新的字符串
public static void main(String[] args) {
// toLowerCase()
// 功能:大写转换成小写
String str = "34A5B87CDE";
str1 = str.toLowerCase();
System.out.println(str1);
}
作用:去除字符串左右空格
传入:无
返回:去除空格后的新字符串
public static void main(String[] args) {
// trim()
// 功能:去除左右空格
// 返回:去除空格后的新字符串
src = " sgeh26SFRTf985jxn ";
System.out.println("使用前:"+src);
src = src.trim(); //去除字符串的左右空格
System.out.println("使用后:"+src);
}
String[] array = {
"puma", "nike", "adidas", "li-ning", "zara", "underma", "northface", "bronx", "axrix",
"hugn" };
// 字符串之间的大小比较,需要compareTo()方法
// 字符串1.compareTo(字符串2)
// 结果为正数(大于0) 代表:字符串1 > 字符串2
// 结果为负数(小于0) 代表:字符串1 < 字符串2
// 结果为0 代表 字符串1 等于 字符串2
// System.out.println(array[0].compareTo(array[1]));
for (int i = 0, n = array.length; i < n - 1; i++) {
for (int k = 0; k < n - 1 - i; k++) {
// 比较相邻两个字符串的大小:使用compareto()方法
if (array[k].compareTo(array[k + 1]) > 0) {
String temp = array[k];
array[k] = array[k + 1];
array[k + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
String[] array = {
"ABC", "XBCD", "HCDE", "AXEDFF", "A", "BCD", "NBCX", "AESSXD", "PADXD" };
// 轮数 = n - 1
for (int i = 0, n = array.length; i < n - 1; i++) {
// 本轮比较次数 = n - 1 - i
for (int k = 0; k < n - 1 - i; k++) {
if (array[k].length() > array[k + 1].length()) {
// 前者的长度 大于 后者的长度
// 进行相邻两个元素的位置交换
String temp = array[k];
array[k] = array[k+1];
array[k+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}