十三、Java字符串

十三、Java字符串,第1张

十三、Java字符 一.String类 1.String类如何创建对象,有哪些常用方法?

String类 : 不可改变的字符串 *** 作类。

String类:java的jdk提供好的开发类[java.lange.String]。

String类 : 是使用final修饰符修饰的,说明他没有子类。

String类的构造函数:

1.String(): 创建一个空字符串。

2.String(byte[] bytes,int offset,int length) :字节数组转换成字符串。

3.String(char[] value, int offset, int count) :字符数组转换成字符串。

4.String(String original):字符串常量创建字符串对象。

5.String(StringBuffer buffer):将StringBuffer转换成字符串。

6.String(StringBuilder builder):将StringBuilder转换成字符串。

例子:

//创建String对象

String str1 = new String();

byte bytearr[] = {97,98,99,100,101};

String str2 = new String(bytearr,0,bytearr.length);

System.out.println("str1=="+ str1);

System.out.println("str2=="+str2);

char arr[] = {'a','e','f','g','h'};

String str3 = new String(arr,0,bytearr.length);

System.out.println("str=="+str3);

String aString  = "1231";

String aString2 = new String("1231");
2.String常用的方法

1.char charAt(int index) 从原始字符串中得到指定位置的字符元素。

2.String concat(String str)将指定的字符串连接到该字符串的末尾。

3.boolean contains(CharSequence s)判断指定的字符串数据是否在原始字符串中存在

4.boolean endsWith(String suffix)测试此字符串是否以指定的后缀结尾。

5.boolean startsWith(String prefix)测试此字符串是否以指定的前缀开头。

6.byte[] getBytes() 将字符串通过默认的字符编码转换成字节数组

byte[] getBytes(String charsetName)将字符串通过指定的字符编码转换成字节数组

7.int indexOf(String str) 返回指定子字符串第一次出现在字符串内的索引位置

8.lastIndexOf(String str)返回指定子字符串最后一次出现的字符串中的索引。

9.boolean isEmpty()判断字符串是否为空串,此方法为true时,字符串长度一定为0

10.int length() 返回此字符串的长度。

11.boolean matches(String regex) 判断字符串数据是否符合正则表达式

12.String replace(CharSequence old, CharSequence new) 将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列

13.String[] split(String regex)通过指定的符号将字符串拆分成一个字符串数组

14.String substring(int beginIndex)截取从指定的开始位置到字符串结尾的一个子字符串

String substring(int beginIndex, int endIndex) 截取从指定的开始位置到指定的结束位置的一个子字符串

15.char[]  toCharArray() 将此字符串转换为新的字符数组

16.String toLowerCase() 大写转小写

17.toUpperCase() 小写转大写

18.String trim()去除原始字符串的两头空格

例子:

public class StringTest {
	public static void main(String[] args) {
		//创建String对象
		String str1 = new String();
		byte bytearr[] = {97,98,99,100,101};
		String str2 = new String(bytearr,0,bytearr.length);
		System.out.println("str1=="+ str1);
		System.out.println("str2=="+str2);
		char arr[] = {'a','e','f','g','h'};
		String str3 = new String(arr,0,bytearr.length);
		System.out.println("str=="+str3);
//		String aString  = "1231";
//		String aString2 = new String("1231");
		
		//面试题:String  s1=new String("abc");创建了几个对象?
		
		
		
		
		//charat
		String email = "192.168.1.1.01";
		char f = email.charAt(2);
		System.out.println(f);
		
		//concat追加
		
		String h = "hello";
		String w = "world";
		h = h.concat("," + w);
		System.out.println(h);
		
		//caontains判断是否存在
		
		System.out.println(h.contains("o"));
		System.out.println(w.contains("h"));
		
		
		//startsWith(String suffix) 判断以什么开始或者结束
		String strarr[] ={ "张三","李四","王五","王欣","王东升"};
		for (String name : strarr) {
			if (name.startsWith("王")) {
				System.out.println("我叫 : "+ name);
			}
		}
		//endsWith()以什么结束
		String hostName = "zjxtw.cn";
		System.out.println(hostName.endsWith(".cn"));
		
		//getBytes()将字符串转换成Byte数组。
		String bytestr = "ab,df";
		byte byteint[] = bytestr.getBytes();
		for (byte b : byteint) {
			System.out.println(b);
		}
		
		//indexOf and lastIndexOf查询字符串出现的位置。
		String aString3  = "bwtffnnsfs";
		//重前往后查找
		System.out.println(aString3.indexOf("ff"));
		//重后往前查找
		System.out.println(aString3.lastIndexOf("s"));
		
		//length()返回字符串的长度
		//matches正则匹配
		
//		replace 替换字符串的数据
		String str = "hellowrold";
		System.out.println(str.replace("he", "we"));
		
//		split 通过指定的字符进行字符串的分割
		
		str = "a,m,b,b,b,c,d,s";
		String strarrs[] = str.split(",");
		for (String b : strarrs) {
			System.out.println(b);
		}
		
		str = "我是谁,我在哪,我在干什么";
		char chararrs[] = str.toCharArray();
		for (char c : chararrs) {
			System.out.printf("%ct",c); 
		}
		System.out.println();
		
		str = "hello world";
		str = str.toUpperCase();
		System.out.println(str);
		str = str.toLowerCase();
		System.out.println(str);
		
		String username = "  ni hao ya ";
		username.trim();
		System.out.println(username);
		System.out.println(str.equals(str1));
	}
}
3.字符串与基本类型的转换

1.String 转换成基本类型

通过基本类型提供的封装类的parseXXX(String  str)

int parseInt(String  str)  / double  parseDoule(String  str)

boolean parseBoolean(String  str).......

上面的这一组parseXXX(String  str)方法只能被基本类型的封装类调用。

只有基本数据类型才有自己对应的封装类。

封装类:基本数据类型对应的复合数据类型

例如:

double  dou=12.5;  // double类型的变量,没有可供使用的方法

Double  dou=new Double(12.5); //Double的对象,有可供使用的变量和方法。

Double就是double的封装类

基本类型对应的封装类

基本类型[变量]

byte

short

int

long

float

double

char

boolean

包装类[对象]

Byte

Short

Integer

Long

Float

Double

Character

Boolean

自动装箱---将基本数据类型转换成对应的封装类类型

1.封装类的构造方法

2.将基本数据类型变量/数据值直接赋值给对应的封装类变量

自动拆箱--将封装类类型转成基本数据类型【直接赋值】

    2.基本类型转换成String

将基本数据类型转换成String【static String valueOf(基本数据类型的数据值/变量)】

例子:

public class StringToBasic {
	public static void main(String[] args) {
		//字符串与基本类型的转换
		//1.字串传通过包装类转换成 基本类型
		String str1 ="123";
		System.out.println(Byte.parseByte(str1));
		
		str1 += 1;
		System.out.println(Integer.parseInt(str1));
		
		str1 += 2567;
		System.out.println(Long.parseLong(str1));
		
		str1  = "男女";
		
		char char1  = str1.charAt(str1.indexOf('男'));
		System.out.println(char1);
		
		str1 = "true";
		System.out.println(Boolean.parseBoolean(str1));
		
		
		
		
		int a = 18;
		char b = '男';
		char c = '女';
		Integer a1 = new Integer(a);
		Integer a2 = new Integer(18);
		Integer a3 = a;
		Integer a4 = 18;
		Character b1 = b;
		Character b2 = new Character(b);
		
		Character c1 = c;
		
		
		
		a = a1.intValue();
		System.out.println(a);
		b = b1.charValue();
		System.out.println(b);
		
		//将基本数据类型转换成String
		//1.将基本的数据类型再转换成String[static String valueOf(基本数据类型/变量)]
		int f = 18;
		String f1 = String.valueOf(f);
		System.out.println(f1 + 1);
		String f2 = String.valueOf(b);
		System.out.println(f2);
	}
}
基本数据类型与对应封装类的区别

基本数据类型

封装类

基本类型

变量,没可供调用的方法和变量

构造出来都是对象,提供了变量和方法

只在内存的栈区有数据分配

内存的栈区和堆区都有内存分配。

有各自默认的数据值 int---0  

默认值为null   Integer---null

4.String类与字节数组或者字符数组之间的相互转换

String类与字节数组

1.String类转换成字节数组----

String类的”byte[] getBytes()”/”byte[] getBytes(String charsetName)”

2.字节数组转换String类型----

String类的构造方法String(byte[] bytes, int offset, int length)

String类与字符数组

1.String类转换成字符数组----

String类的”char[]  toCharArray()”

2.字符数组转换String类型----

String类的构造方法”String(char[] value, int offset, int count)”

例子:

//char 和 byte 数组到字符串  相互转化
public class Char_byte_String {
	public static void main(String[] args) {
		
//		char[]~~String
		char arr[] = {'A','B','C','D'};
		//String str1 = new String(arr);
		String str1 = new String(arr,0,arr.length);
		System.out.println(str1);
		
		char[] arr1 = str1.toCharArray();
		for (char c : arr1) {
			System.out.printf("%ct",c);
		}
		System.out.println();
		
//		byte[]~~String
		byte bytearr[] = {96,97,98,99,100};
		//String f = new String(bytearr);
		
		String f1 = new String(bytearr,0,bytearr.length);
		System.out.println(f1);
		
	}
}

二、StringBuilder和StringBuffer(很相似) 1.StringBuilder

StringBuilder:一个可变的字符序列

1.创建构造函数

1.StringBuilder()

构造一个初始容量为16个字符的空StringBuilder对象。

2.StringBuilder(CharSequence seq)

通过其他的StringBuilder对象创建一个新的StringBuilder对象

3.StringBuilder(int capacity)

构造一个由 capacity参数指定的初始容量得空StringBuilder对象

4.StringBuilder(String str)

 构造一个初始化为指定字符串内容的StringBuilder对象。

代码例子:

StringBuffer ts = new StringBuffer(); //默认初始容量为16

StringBuffer ts1 = new StringBuffer('1');

StringBuffer ts2 = new StringBuffer(25); //控制Stringbuffer的初始容量

StringBuffer ts3 = new StringBuffer("fff");

System.out.println(ts3);

2.常用方法总结

返回值

函数名(参数)

作用

int

capacity()

返回当前容量。

char

charAt(int index)

返回 char在指定索引在这个字符值。

int

indexOf(String str)

返回指定子字符串第一次出现的字符串内的索引。

int

lastIndexOf(String str)

返回指定子字符串最右边出现的字符串内的索引。

int

length()

返回长度(字符数)。

StringBuilder

append(Object str)

将参数的字符串表示追加到序列中。

StringBuilder

delete(int start,int end)

删除此序列的子字符串中的字符。

StringBuilder

deleteCharAt(int index)

删除 char在这个序列中的指定位置。

StringBuilder

insert(int offset, Object o)

将参数的字符串表示插入到此序列中指定的位置。

StringBuilder

reverse()

导致该字符序列被序列的相反代替。

StringBuilder

replace(int start, int end, String str)

用指定的String中的字符替换此序列的子字符串中的 String 。

String

substring(int start)

返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

String

substring(int start, int end)

返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。

String

toString()

返回表示此顺序中的数据的字符串。

例子:

//StringBuilder字符串类
public class StringBuilderTest {
	public static void main(String[] args) {
		StringBuilder ts = new StringBuilder(); //默认初始容量为16
		StringBuilder ts1 = new StringBuilder('1');
		StringBuilder ts2 = new StringBuilder(25); //控制的初始容量
		StringBuilder ts3 = new StringBuilder("fff");
		System.out.println(ts3);
//		常用方法
		//System.out.println(ts3.capacity());
		//System.out.println(ts3.length());
		StringBuilder ts4 = new StringBuilder("hello world");
		System.out.println(ts4.capacity());
		System.out.println(ts4.charAt(4));
		System.out.println(ts4.indexOf("d"));
		StringBuilder f2 = ts4.append("25");
		System.out.println(f2);
		
//		可以改变的字符串
		System.out.println("删除所有的字符串" + ts4.delete(0, ts4.length()));
		f2.append("加入后的数据");
		System.out.println(f2);
		f2.deleteCharAt(2);
		System.out.println(f2);
		
//		字符串的反转和拆入
		f2.reverse();
		System.out.println(f2);
		f2.replace(0, 1, "橘子");
		f2.reverse();
		System.out.println(f2);
		
		System.out.println();
		String str = f2.substring(2,4);
		System.out.println(str);
		System.out.println(f2.toString());
	}
}

3.StringBuilder与String得转换

StringBuilder-->String  

        1.StringBuilder的toString();

        2.String的构造方法String(StringBuilder builder)

String-->StringBuilder

        1. StringBuilder的构造方法

例子:

package com20211109;

//Sting ~~ StringBilder
public class StringToStringBuilder {

	public static void main(String[] args) {
		String name = "zhangsan";
		
		StringBuilder f = new StringBuilder();
		
//		1
		String name1 = f.toString();
		System.out.println(name);
//		2
		String name2 = new String(f);
		System.out.println(name2);
	}

}
2.StringBuffer字符串类 1.StringBuffer类的构造方法

1.StringBuffer() 构造一个初始容量为16个字符的空StringBuffer对象。

2.StringBuffer(CharSequence seq) 通过其他的StringBuffer对象创建一个新的StringBuffer对象

3.StringBuffer(int capacity) 构造一个由 capacity参数指定的初始容量得空StringBuffer对象。

4.StringBuffer(String str) 构造一个初始化为指定字符串内容的StringBuffer对象。

例子:

构造函数4种
		StringBuffer stbf = new StringBuffer();
		StringBuffer stbf1 = new StringBuffer(20);
		StringBuffer stbf2 = new StringBuffer('2');
		StringBuffer stbf3 = new StringBuffer("完成任务");
2.StringBuffer类的方法

返回值

函数名(参数)

作用

int

capacity()

返回当前容量。

char

charAt(int index)

返回 char在指定索引在这个字符值。

int

indexOf(String str)

返回指定子字符串第一次出现的字符串内的索引。

int

lastIndexOf(String str)

返回指定子字符串最右边出现的字符串内的索引。

int

length()

返回长度(字符数)。

StringBuffer

append(Object str)

将参数的字符串表示追加到序列中。

StringBuffer

delete(int start,int end)

删除此序列的子字符串中的字符。

StringBuffer

deleteCharAt(int index)

删除 char在这个序列中的指定位置。

StringBuffer

insert(int offset, Object o)

将参数的字符串表示插入到此序列中指定的位置。

StringBuffer

reverse()

导致该字符序列被序列的相反代替。

StringBuffer

replace(int start, int end, String str)

用指定的String中的字符替换此序列的子字符串中的 String 。

String

substring(int start)

返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

// 	常用的方法
		StringBuffer ts4 = new StringBuffer("hello world");
		System.out.println(ts4.capacity());
		System.out.println(ts4.charAt(4));
		System.out.println(ts4.indexOf("d"));
		StringBuffer f2 = ts4.append("25");
		System.out.println(f2);
		
//		可以改变的字符串
		System.out.println("删除所有的字符串" + ts4.delete(0, ts4.length()));
		f2.append("加入后的数据");
		System.out.println(f2);
		f2.deleteCharAt(2);
		System.out.println(f2);
		
//		字符串的反转和拆入
		f2.reverse();
		System.out.println(f2);
		f2.replace(0, 1, "橘子");
		f2.reverse();
		System.out.println(f2);
		
		System.out.println();
		String str = f2.substring(2,4);
		System.out.println(str);
		System.out.println(f2.toString());

StringBuilder与StringBuffer的区别?

StringBuilder:一个可变的字符序列,不保证线程同步【线程安全】. 访问速度快   jdk1.5

StringBuffer:一个可变的字符序列,保证线程安全. 访问速度慢   JDK1.0

String+StringBuffer-StringBuilder区别

 String

StringBuilder

StringBuffer

是否可变

不可变

可以变

可以变

线程是否安全

非线程安全

非线程安全

线程安全

运行速度

较快

*** 作的情况

少量的字符串 *** 作[拼接]的情况

单线程下字符串 *** 大量 *** 作的情况

多线程下字符串 *** 大量 *** 作的情况

面试题:”==” 与 equals方法的区别?

==

equals

 比较运算符

 java.lang.Object中的方法

 基本类型:比较数据值

 不能被比较

复合类型:堆内存地址【引用地址】。

复合类型:堆内存地址【引用地址】

如果被重写比较的是存储对象的内容[String]。

无奈源于不够强大

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5434296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存