Java-String类

String类

String类:代表字符串.字符串一旦被赋值,其值不能在改变.

String类常用构造方法:

String():表示一个空字符序列.

public String(byte[] bytes,Charset ch):默认字符集(编码格式):GBK,如果是GBK格式,可以不写第二个参数.

public String(byte[] bytes,int index,int length):将部分字节数组构造成一个字符串.

public String(char[] value):将数组字符构造成一个字符串.

public String(char[] value,int index,int length):将部分字符数组构造成一个字符串.

public String(String original):通过字符串常量构造成一个字符串对象.

相关代码:

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

public class stringDemo {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String s1=new String();//空字符序列
		System.out.println("s1:"+s1);
		System.out.println("s1.length():"+s1.length());
		System.out.println("--------------");
		String s2="立华奏";
		byte[] bys1=s2.getBytes();
		System.out.println("bys1:"+bys1);
		//Arrays:数组工具类:toString(byte[] bys)
		System.out.println(Arrays.toString(bys1));//以GBK格式编码 :一个中文两个字节
		byte[] bys2=s2.getBytes("utf-8");
		System.out.println(Arrays.toString(bys2));//utf-8:一个中文三个字节
		System.out.println("--------------");
		byte[] bys3={97,98,99};
		String s3=new String(bys3,1,2);//字节的值需要找对应的ASCII码值
		System.out.println("s3:"+s3);
		System.out.println("--------------");
		char[] chs={'立','华','奏'};
		String s4=new String(chs);//将字符数组构造成字符串
		System.out.println("s4:"+s4);
		String s5=new String(chs,1,2);
		System.out.println("s5:"+s5);
		System.out.println("--------------");
		String s6=new String("立华奏");//通过字符常量构造一个字符对象
		change(s6);
		System.out.println("s6:"+s6);
		s6+="我爱你";
		System.out.println("s6:"+s6);
		System.out.println("--------------");
		String s7="立华奏";
		change(s7);
		System.out.println("s7:"+s7);
		s7+="我爱你";
		System.out.println("s7:"+s7);
		System.out.println("s7.length():"+s7.length());
	}
	public static void change(String s){//String类型作为形式参数跟数据类型的效果一样
		s+="我爱你";
	}
}
结果为:
s1:
s1.length():0
--------------
bys1:[B@25fe6783
[-63, -94, -69, -86, -41, -32]
[-25, -85, -117, -27, -115, -114, -27, -91, -113]
--------------
s3:bc
--------------
s4:立华奏
s5:华奏
--------------
s6:立华奏
s6:立华奏我爱你
--------------
s7:立华奏
s7:立华奏我爱你

s7.length():6


获取字符串长度功能:
public int length()

面试题:1.数组没有length(),有length属性;字符串有length();集合中没有length(),用size().2.String s="立华奏"与String s=new String("立华奏")的区别:第一个创建一个对象,第二个创建两个对象(堆内存有new String(),然后字符常量池中也有这样一个字符串常量(开辟空间的地址))


String类中常用的判断功能:
boolean equals(Object obj):判断该对象是否与obj对象相等.
boolean equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写.
boolean contains(String str):判断str这个字符串是否包含在当前字符串中.
boolean startsWith(String str):判断str这个字符串是否出现在当前字符串的开头.
boolean endsWith(String str):判断str这个字符串是否出现在当前字符串的末尾.
boolean isEmpty():判断该字符串是否为空.
相关代码:

public class stringDemo {
	public static void main(String[] args) {
		String s1="I love 立华奏";
		String s2="I LOVE 立华奏";
		System.out.println("equals:"+s1.equals(s2));
		System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));//比较两个字符串,不分大小写
		System.out.println("contains:"+s1.contains(s2));
		System.out.println("contains:"+s1.contains("立华奏"));
		System.out.println("startsWith:"+s1.startsWith("I"));
		System.out.println("endsWith:"+s1.endsWith("立华奏"));
		System.out.println("isEmpty:"+s1.isEmpty());
	}
}

结果为:
equals:false
equalsIgnoreCase:true
contains:false
contains:true
startsWith:true
endsWith:true

isEmpty:false


String类的获取功能:
int length():获取字符串的长度.
char charAt(int index):返回的是索引处的字符.
int indexOf(int ch):返回指定字符在此字符串中第一次出现的索引.int定义:ASCII码值
int indexOf(String str):返回指定字符串在此字符串中第一次出现的索引.
int indexOf(int ch,int fromIndex):返回指定字符在此字符串第一次出现的索引,从指定的索引开始搜索.
int indexOf(String str,int fromIndex):返回指定字符串在此字符串第一次出现的索引,从指定的索引开始搜索.
String substring(int start):从指定位置开始截取,默认到末尾.
String substring(int start,int end):从指定位置开始截取到指定位置结束,包前(start)不包后(end).
字符串变量相加:先开辟空间,再相加.
字符串常量相加:首先在字符串常量池寻找,有没有当前这个常量值,有直接返回,没有需要创建.
相关代码:

public class stringDemo {
	public static void main(String[] args) {
		String s1="I love 立华奏";
		System.out.println("length():"+s1.length());
		System.out.println("charAt:"+s1.charAt(9));
		System.out.println("indexOf:"+s1.indexOf('l'));
		System.out.println("indexOf:"+s1.indexOf("立华奏"));
		System.out.println("indexOf:"+s1.indexOf("立华奏", 1));
		System.out.println("indexOf:"+s1.indexOf('o', 1));
		System.out.println("substring:"+s1.substring(7));
		System.out.println("substring:"+s1.substring(2, 10));//包前不包后
	}
}
结果为:
length():10
charAt:奏
indexOf:2
indexOf:7
indexOf:7
indexOf:3
substring:立华奏
substring:love 立华奏

String类其他功能:


替换功能:
public String replace(char oldChar,char newChar):将字符串中某一个字符用新的字符替换.
public String replace(String oldStr,String newStr):将字符串中某一段字符串用新的字符串替换.
去除字符串两端功能:
public String trim()
两个字符串进行比较:
public int compareTo(String anotherString):是Comparable接口中的方法(该接口可以实现一个自然排序).
相关代码:

public class stringDemo {
	public static void main(String[] args) {
		String s1="I love 立华奏";
		System.out.println("replace:"+s1.replace('l', 'L'));
		System.out.println("replace:"+s1.replace("love","LOVE"));
		String s2=" I love 立华奏 ";
		System.out.println("trim:"+s2.trim());
		System.out.println("compareTo:"+s1.compareTo(s2));
	}
}
结果为:
replace:I Love 立华奏
replace:I LOVE 立华奏

trim:I love 立华奏


compareTo:41

compareTo()的源码:

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
 }
String类中特有的方法:

public boolean matches(String regex):告知此字符串是否匹配给定的正则规则.

public String[ ] split(String regex):根据给定正则表达式的匹配拆分此字符串.返回类型是一个字符串数组类型.

public String replaceAll(String regex,String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串.

相关代码:

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入一个邮箱:");
		String ags=sc.next();
		//定义正则规则
		String regex="\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+";
//		String regex="[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z]{2,3})+";
		boolean flag=ags.matches(regex);
		System.out.println("flag:"+flag);
		//分割功能
		String regex2="@";
		String[] strArray=ags.split(regex2);
		for(int i=0;i<strArray.length;i++)
			System.out.println("strArray:"+strArray[i]);
		//替换功能
		String regex3="[a-zA-Z]";
		String s=".";
		System.out.println("replaceAll:"+ags.replaceAll(regex3, s));
	}
}
结果为:
请输入一个邮箱:
1060511594@qq.com
flag:true
strArray:1060511594
strArray:qq.com
replaceAll:1060511594@......




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值