String字符串的基本用法

本文详细介绍了Java中的String类特性,包括其作为引用类型、不可变性、字符串操作(如遍历、比较、替换、截取、搜索、分割等)、类型转换以及字符编码(ASCII、Unicode和UTF-8)。
摘要由CSDN通过智能技术生成

String字符串类

1、在Java中,String是个引用类型,它本身也是一个class 类。
2、Java编译器对String 有特殊处理,允许可以直接用"...”来表示一个字符串。
3、实际上字符串在string内部是通过一个char[]数组表示的,因为String太常用
     了,所以Java提供了...这种字符串字面量表示方式。

4、Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private
final char[]設,以及没有任何修改char[]的方法实现的。

1、字符串的遍历

eg1

package com.xn.Mon;
//遍历
public class Mon02test {
	public static void main(String[] args) {
		String s = "床前明月光";
		
		for(int i = 0; i < s.length(); i++) {
			char c=s.charAt(i);
			System.out.println(c);
		}
		
		char[] array = s.toCharArray();
		for (int i = 0; i < array.length; i++) {
			char c = array[i];
			System.out.println(c);
		}
	}
}
2、字符串的比较

       当我们想要比较两个字符串是否相同时,要特别注意,我们实际上是想比较字符串的内容
是否相同。必须使用equals()方法而不能用=关系运算符。

        从面上看,两个字符串用==和equals()比较都为true,实际上那只是Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常 量池,s1和s2的引|用地址就是相同的,结果为true 。所以,这种==比较返回true纯属巧合。换-种写法,==比较就会失败,

结论:两个字符串比较,必须总是使用equals()方法。要忽略大小写比较,使用equalsIgnoreCase()方法。
 

eg2

package com.xn.Mon;
//字符串的比较
//实现方式:String类implement实现类Comparable接口,compareTo()方法
public class Mon03 {
	public static void main(String[] args) {
		String s1="bcd";
		String s2="bcf";
		System.out.println(s1.compareTo(s2));
	}
}
3、字符串的替换

要在字符串中替换子串,有两种方法。
        第一种:根据字符或字符串替换。
        第二种:是通过正则表达式替换。

eg3

package com.xn.Mon;

public class Mon07 {
	public static void main(String[] args) {
		String ip="12.243.54";
		//字符替换字符
		String ret=ip.replace('.','*');
		//字符串替换字符串
		String net=ip.replace(".", "[.]");
		System.out.println("原字符串:"+ip);
		System.out.println("字符替换后的字符串:"+ret);
		System.out.println("字符串替换后的字符串:"+net);
	}
}
4、字符串的截取

使用substring() 方法可以从当前字符串中,截取指定下标区间的子字符串。
 

eg4

package com.xn.Mon;

public class Mon05 {
	public static void main(String[] args) {
		String email="354345@qq.com";
		//截取用户名
		int endIndex=email.indexOf("@");
		String userName=email.substring(0,endIndex);
		//截取邮箱服务器
		int beginIndex=endIndex+1;
	    endIndex=email.indexOf(".");
	    String host=email.substring(beginIndex,endIndex);
	    System.out.println("用户名:"+userName);
	    System.out.println("邮箱服务器:"+host);
		
	}
}
5、字符串的空字符的去除

使用trim() 方法可以移除字符串首尾空白字符。空空字符包括空格,\t  \r  n 。
注意:trim() 并没有改变字符串的内容,而是返回了一个新字符串。
        String还提供了isEmpty() 判断字符串是否为空字符串:

eg5

package com.xn.Mon;

public class Mon06 {
	public static void main(String[] args) {
		//空白字符:空格 \t \n \r
		String s = " \tB\tIS\t\n\r";
		//去除*首位*“空白字符”
		s=s.trim();
		System.out.println(s);
		System.out.println(s.length());
	}
}
6、字符串的的搜索

        index0f() 方法可以从字符串的首部进行搜索,当前字符串中指定子字符串的下标
位置,返回值为int类型。如果存在,则返回该子字符串的下标位置。如果不存在,则返
回-1 ;
        lastIndex0f()方法是从字符串的尾部进行搜索,返迥值与index0f() 方法一致;
        startsWith()endsWith()方法是用于判断字符串是否以指定字符串开头或结尾,
返回值为boolean类型;
        contains()方法用于查找当前字符串中是否存在指定子字符串,返回值为boolean 类
型。

eg6

package com.xn.Mon;
//字符串的查找搜索
//index0f()方法: 从原字符串中查找目标字符串,返回第一次出现的位置
//lastIndex0f()方法: 从原字符串中查找目标字符串,返回最后一次出现的位置
//contains()方法: 判断原字符串中是否存在目标字符串
//startswith()方法: 判断原字符串是否以目标字符串开头
//endsWith()方法: 判断原字符串是否以目标字符串结尾
public class Mon04 {
	public static void main(String[] args) {
//		String s1="举杯邀明月";
//		String target ="月";
//		int index=s1.indexOf(target);
//		System.out.println(index);
		String s2="唧唧复唧唧木兰当户织";
		String target="唧唧";
		String tar="木兰";
		System.out.println(s2.startsWith(target));
		System.out.println(s2.endsWith(target));
		System.out.println(s2.contains(tar));
		
		String url="http://www.165.com";
		if((url.startsWith("http")||(url.startsWith("https"))&&(url.endsWith(".com")||(url.endsWith(".cn"))))) {
			System.out.println("合法网址");
		}else {
			System.out.println("");
		}
		
	}
}
7、分割字符串

要分割字符串,使用split()方法,并且传入的也是正则表达式:
 

eg7

package com.xn.Mon;

import java.util.Arrays;

public class Mon09 {
	public static void main(String[] args) {
		String s1= "北京#上海#南京#深圳#北京#昆明#毕节#成都";
		String[]  ret1=s1.split("#");
		System.out.println(s1);
		System.out.println(Arrays.toString(ret1));
		
		//按照正则表达式进行分割
		String s2= "北京A上海B南京C深圳DS北京E昆明F毕节G成都";
		String[]  ret2=s2.split("[A-Z]");
		System.out.println(s2);
		System.out.println(Arrays.toString(ret2));
		
		String s3= "北京0上海66南京8深圳4北京9昆明1毕节6成都";
		String[]  ret3=s3.split("[0-9]");
		System.out.println(s3);
		System.out.println(Arrays.toString(ret3));
		
		String s4= "北京A上海B南京C深圳D北京E昆明F毕节G成都";
		String[]  ret4=s4.split("[A-Z]");
		System.out.println(s4);
		System.out.println(Arrays.toString(ret4));
		
		//按照正则表达式的特殊字符进行分割
		String s5= "北京+上海+南京+深圳+北京+昆明+毕节+成都";
		String[]  ret5=s5.split("\\+");
		System.out.println(s5);
		System.out.println(Arrays.toString(ret5));
	}
}

 8、拼接字符串

eg8

拼按字符串使用静态方法jin),它用指定的字符串连接字符事数组:
 

package com.xn.Mon;
//拼接字符串
//String.join()方法:将多个字符串元素使用指定字符串,拼接成完整的字符串
//String.format()方法:将多个数据元素按照指定格式拼接
public class Mon10 {
	public static void main(String[] args) {
		//传入数组
		String[] arr= {"宝鸡","榆林","咸阳","杨林","铜川","汉中"};
		String ret1=String.join("*", arr);
		System.out.println(ret1);
		
		//传入动态参数
		String ret2=String.join("$","宝鸡","榆林","咸阳","杨林","铜川","汉中" );
		System.out.println(ret2);
		
		//String.format()
		String a="小红";
		int n=14;
		String ret3=String.format("%s的年龄是%d岁", a,n);
		System.out.println(ret3);
	}
}
9、格式化字符串

         字符串提供了format() 静态方法,可以传入其他参数,替换占位符,然后生成新的字符串。

有几个占位符,后面就传入几个参数。参数类型要和占位符一致。 我们经常用这个方法来
格式化信息。常用的占位符有:%s:表示字符串,%d表示整数,%f :浮点数,占位符还可以带格式,例如%. 2f示示两位小数。如果你不确定用啥占位符,那就始终用%s,因为%s可以显示任何数据类型。
 

eg9

//String.format()
		String a="小红";
		int n=14;
		String ret3=String.format("%s的年龄是%d岁", a,n);
		System.out.println(ret3);
 10、类型转换

要把任意基本类型或引用类型转换为字符串,可以使用静态方法value0f() 。这是一个(
重载方法,编译器会根据参数自动选择合适的方法:
 

11、转化成char[ ]类型可以互相转换

 String和char[]类型可以互相转换。如果修改了char[] 数组,[ String 钚会改变,这因为通过new String( char[])创建新的String 实例时,它并不会直接引|用传入的char[] 数组,而是会复制一份,所以,修改外部的char[] 数组不会影响String 实例内部的char[] 数组,因为这是两个
不同的数组。
 

eg10

package com.xn.Mon;

import java.util.UUID;

public class Mon12 {
	public static void main(String[] args) {
		String uuid = UUID.randomUUID().toString();
		System.out.println(uuid);
		// 替换字符串中所有的数字,在原有数字基础上+1
		StringBuilder sb = new StringBuilder(uuid);
		// 遍历字符串
		for (int i = 0; i < sb.length(); i++) {
			// 获取每个字符
			char c = sb.charAt(i);
			// 判断该字符是否是数字
			if (c >= '0' && c <= '9') {
				// 转换成数字后,+1
				int n = Integer.parseInt(String.valueOf(c));
				// 0-9
				n = n + 1 > 9 ? 0 : n + 1;
				// 直接在当前字符串对象的内存中,完成替换
				sb.replace(i, i + 1, String.valueOf(n));
			}
		}
		System.out.println(sb);
	}
}

 12、字符编码

字符编码

ASCII码:包含A-Za-z、符号,占1个字节

Unicode码:包含主流编码集,占2个字节

UTF-8码:占3个字节

eg11

eg11

package com.xn.Mon;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

//字符编码
//ASCII码:包含A-Za-z、符号,占1个字节
//Unicode码:包含主流编码集,占2个字节
//UTF-8码:占3个字节
public class Mon11 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		// char c1 = 'A'; //占2个字节(消耗1个字节,闲置1个字节)
		//charc2='中’;//占2个字节
		String s1 = "A";
		String s2 = "中";
		String s3 = "中";
		// 获取字符串 的字节数组
		byte[] b1 = s1. getBytes(); //按照默认Unicode码获取字节值
		byte[] b2 = s2. getBytes(); //按照默认Unicode码获取字节值
		byte[] b3 = s3. getBytes("UTF-8"); //按照UTF-8码获取字节值
		System.out.println("A=" + Arrays.toString(b1));
		System.out.println("中=" + Arrays.toString(b2));
		System.out.println("中="+ Arrays.toString(b3));
		String S = " ABCD";
		byte[] s = S. getBytes("UTF-8");
		System.out.println("中="+ Arrays.toString(s));

	}
}

小结
Java字符串String 不可变对象
字符串操作不改变原字符串内容,而是返回新字符串
常用的字符串操作:提取子串、查找、替换、大写转换等
Java使用Unicode编码表示String和char
转换编码就是将String 和byte[] 转换,要指定编码
转换为byte[] 时,始终优先考虑UTF-8编码
 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值