• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

关于Java字符串

互联网 diligentman 1周前 (02-18) 8次浏览

关于字符串

  • 一、基本概念
  • 二、创建方式
  • 三、常用方法
    • 1.valueOf( )
    • 2.format( )
    • 3.charAt( )
    • 4.toCharArray( )
    • 5.split( )
    • 6.substring( )
    • 7.compareTo( )
    • 8.equals( );equalsIgnoreCase( )
    • 9.contains( )
    • 10.indexOf( );lastIndexOf( )
    • 11.replace( );replaceFirst( )
    • 12.startsWith( )
    • 13.endsWith( )
    • 14.toUpperCase( )
    • 15.toLowerCase( )
    • 16.trim()
    • 17.字符串的比较
      • (1)按照字符大小进行冒泡排序
      • (2)按照字符长度进行冒泡排序

一、基本概念

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);
	}

三、常用方法

1.valueOf( )

作用:将指定的其他类型数据转换为字符串
传入:需要转换的其他类型的数据

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);

	}

2.format( )

作用:按照指定的格式字符串( “%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=%dn", 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);
}

3.charAt( )

作用:按照指定的下标位置,获取对应的字符
传入:下标位置(下标位置不能越界)
返回:该下标位置对应的字符

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
}

4.toCharArray( )

作用:将当前字符串转换为字符数组
传入:无
返回:该字符串对应的字符数组

public static void main(String[] args) {
		
		// 方法:toCharArray()
		// 功能:返回该字符串中的字符数组
		String str3 = "我与夏风皆过客";
		char[] chs =  str3.toCharArray();
		System.out.println(chs[4]);//皆
		System.out.println(chs[2]);//夏
		
	}

5.split( )

作用:按照指定的字符或者字符串,对原字符串进行切割
传入:指定字符串(进行切割的格式)。指定字符串中如果包含特殊字符(正则表达式),需要使用 进行转义

返回:字符串数组,包含切割后的每个子字符串

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);
		}
	}

6.substring( )

作用:截取字符串中的子字符串
传入:截取的开始位置下标和结束位置下标
返回:截取后的子字符串

public static void main(String[] args) {
        // 方法.substring()
		// 功能:截取子字符串
		// 返回:截取后的子字符串
		fileName = "weweweweweok.apk";
		int beginPos = fileName.indexOf("."); // 查找.的位置

		// 案例1:截取后缀名
		// 从指定开始位置,截取至字符串的尾部(截取后缀名)
		String suffix = fileName.substring(beginPos);
		System.out.printf("%s的后缀名是%sn", fileName, suffix);

		// 案例2:截取文件名
		// 从指定开始位置,截取至指定结束位置(截取文件名)
		String name = fileName.substring(0, beginPos);
		System.out.printf("%s的文件名是%sn", fileName, name);
}

7.compareTo( )

作用:比较两个字符串之间的大小
比较规则:比较两个字符串对应字符 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));
	}

8.equals( );equalsIgnoreCase( )

作用: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
	}

9.contains( )

作用:判断字符串是否包含指定子字符串
传入:子字符串
返回: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
}

10.indexOf( );lastIndexOf( )

作用:查找指定子字符串
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("邮箱正常");
		}
}

11.replace( );replaceFirst( )

作用:replace( )将指定子字符串替换(全部替换)
replaceFirst( )替换字符串中出现的第一个子字符串
传入:要替换的子字符串和新的字符串
返回:替换后的新字符串

public static void main(String[] args) {
        // replace() 
		// 功能:将指定子字符串替换
		// 返回:替换后的新字符串
		
		// 案例:替换标点符号
		String content = "风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。";
		content = content.replace(",", "!").replace("。", "!");
		System.out.println(content);

        // replaceFirst( )
		String src ="<img src="https://img1.doubanio.com>"+"<img src="https://img2.doubanio.com>"+"<img src="https://img3.doubanio.com>";
		
		src = src.replaceFirst(".com", ".png");
		System.out.println(src);
}

12.startsWith( )

作用:判断字符串是否以指定子字符串"开头"
传入:指定子字符串
返回:true:代表是
false:代表不是

public static void main(String[] args) {
        // 方法:startsWith(子字符串)
		// 功能:判断字符串是否以指定子字符串"开头"
		String url = "ftp://www.baidu.com";
		System.out.println(url.startsWith("ftp"));//true

}

13.endsWith( )

作用:判断字符串是否以指定子字符串"结尾"
传入:指定子字符串
返回:true:代表是
false:代表不是

public static void main(String[] args) {
		// 方法:endsWith(子字符串)
		// 功能:判断字符串是否以指定子字符串"结尾"
		String fileName = "weixin.docx";
		System.out.println(fileName.endsWith(".png"));//false
}

14.toUpperCase( )

作用:小写转换成大写
传入:无
返回:新的字符串

public static void main(String[] args) {
        // toUpperCase()
		// 功能:小写转换成大写
        String str = "shbxhdjc";
		str1 = str.toUpperCase();
		System.out.println(str1);
}

15.toLowerCase( )

作用:大写转换成小写
传入:无
返回:新的字符串

public static void main(String[] args) {
        // toLowerCase()
		// 功能:大写转换成小写
        String str = "34A5B87CDE";
		str1 = str.toLowerCase();
		System.out.println(str1);
}

16.trim()

作用:去除字符串左右空格
传入:无
返回:去除空格后的新字符串

public static void main(String[] args) {
        // trim()
		// 功能:去除左右空格
		// 返回:去除空格后的新字符串
		src = "       sgeh26SFRTf985jxn    ";
		System.out.println("使用前:"+src);
		src = src.trim(); //去除字符串的左右空格
		System.out.println("使用后:"+src);
}

17.字符串的比较

(1)按照字符大小进行冒泡排序

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));
	}

(2)按照字符长度进行冒泡排序

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));
	}


程序员灯塔
转载请注明原文链接:关于Java字符串
喜欢 (0)