欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java从入门到精通_学习笔记05

程序员文章站 2022-06-30 22:55:47
...

字符串【String】

字符串是Java程序中经常处理的对象。在Java中字符串作为String类的实例来处理。

String类

基本类型中的char类型,它只能表示当个字符,不能表示由多个字符连成的字符串(如:char c = ‘a’ ; ~~ char c = ‘ab’是错误的 ~~)。在Java语言中将字符串作为对象来处理,可以通过java.lang包中的String类来创建字符串对象。

声明字符串

1.字符串常量
例如:“123” 、 “ABCD” 、 “你好”

在Java中,所有由 (" ") 包围的都是字符串,不能作为其他数据类型来使用,如:“1 + 2” 的输出结果不可能是3。

2.字符串变量
String str ;

  • String :指定变量为字符串类型;
  • str :表示字符串变量的名称。
String str ; //声明一个字符串

声明的字符串变量必须经过初始化后才能够使用,否则编译器会报错。

创建字符串

String类型的常用构造方法:

  1. 使用字符数组创建String对象
    String(char a[])
char a[] = { 'g' , 'o' , 'o' , 'd' }; // 准备一个字符串数组
String str = new String(a); // 等价与String str = new String("good");
  1. 使用字符数组的一部分创建一个字符串对象
    String(char a[] , int offset , int length)

offset表示开始截取的字符串的位置;length表示截取字符串的长度

char a[] = { 's' , 't' , 'u' ,'d' ,'e' , 'n' , 't'  };
String str = new String(a , 2 , 4);
  1. 通过字符串常量赋值给String的引用
String str;
str = "good";

String str = new String("good");

连接字符串

  1. 连接多个字符串
    使用** + 运算符连接多个字符串并产生一个新的String对象**。
public class Join{
	public static void main (String []args){
		// 准备两个字符串str1和str2
		String str1 = new String("hello"); 
		String str2 = new String("world!");
		// 使用 “+” 运算符连接两个字符串形成一个新的字符串(中间加了一个空格)
		String s = str1 + " " + str2 ;
		System.out.println(s);
	}
}
  1. 连接不同数据类型为字符串
    如果字符串同其他基本类型的数据进行连接,会直接将这些数据转换成字符串。
public class Link{
	public static void main(String []args){
		// 准备两个非String类型变量booktime和practice
		int booltime = 4;
		float practice = 12.5f;
		// 使用 “+“运算符连接两个变量并产生一个新的字符串
		System.out.println("我每天花费" + booktime + “小时看书;”
		 + practice +  “小时上机练习”  );
	}
}

如果字符串太长,为了便于阅读,必须将这个字符串分在两行上书写,则需要使用”+“将两个字符串连起来。

获取字符串信息

字符串作为对象,可以通过调用相应的方法获取字符串自身的信息。

  1. 字符串对象.length() 获取字符串长度
String str = "hello";
str.length(); // 返回字符串str的长度:5

length()返回的字符串长度包括字符串中的空格

  1. 字符串对象.indexOf(String s)返回指定参数s在字符串对象中首次出现的索引位置
String str = "good";
str.indexOf("o"); // 返回”o“首次出现的索引位置:1

indexOf()方法会从字符串开始位置(0索引位置处)开始搜索s的位置,如果没有检索到,返回值为-1.

  1. 字符串对象.lastIndexOf(String s)返回指定参数s在字符串对象中最后出现的索引位置
String str  = "good";
str.lastIndexOf("o"); // 返回”o“最后出现的索引位置:2

lastIndexOf()方法会从开始位置(0索引位置处)开始搜索s的位置,如果没有检索到,就返回-1.

  1. 字符串对象.charAt(int index)返回字符串对象中指定索引位置index处的字符
String str = "hello";
str.charAt(1); // 返回指定索引位置的字符:e

如果指定索引“index”超出字符串的范围(0~字符串对象.length()),则返回一个空字符串。

字符串操作

  1. 字符串对象.substring(int beginIndex) 返回从指定索引位置beginIndex处开始截取到结尾的子字符串子串
String str = new String("Hello World");
String s = str.substring(6); //从指定索引位置6处开始截取字符串到结尾:World
System.out.println(s);
  1. 字符串对象.substring(int beginIndex , int endIndex) 返回从beginIndex索引位置到endIndex索引位置的截取的字符串子串
String str = new String("good");
String s = str.substring(1 , 3); // 将str从1索引位置到3索引位置(不包括3)的截取的字符串子串:oo
System.out.println(s);
  1. 字符串对象.trim() 返回忽略字符串对象首尾处空格的字符串副本
String str = new String("   good   ");
String s = str.trim(); // 将str前后位置的空格全部去掉,并返回一个新的字符串:good
System.out.println(s);
  1. 字符串对象.replace(char oldChar , char newChar) 返回将指定的字符(字符串)替换成新的字符(字符串)的新字符串
String str = new String("good");
String s = str.replace(o , e); // 将str中的字符o全部转换成e:geed
System.out.println(s);
  1. 字符串对象.startsWith(String prefix) 判断当前字符串对象是否以prefix为前缀
String str = new String("good");
System.out.println( str.startsWith(“g”)); // 判读str是否以字符g开始:true
  1. 字符串对象.endsWith(String suffix) 判断当前字符串对象是否以suffix为后缀
String str = new String("good");
System.out.println( str.endsWith(“d”)); // 判读str是否以字符g结束:true
  1. 字符串对象.equals(String otherstr) 判断当前字符串对象是否与指定的otherstr字符串内容相等
String str1 = new String("hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));//判断str1和str2是否内容相等:false
  1. 字符串对象.equalsIgnoreCase(String otherstr) 判断当前字符串对象是否与指定的otherstr字符串内容相等,忽略大小写
String str1 = new String("hello");
String str2 = new String("Hello");
System.out.println(str1.equalsIgnoreCase(str2));//判断str1和str2是否内容相等,忽略大小写:true

运算符“==”也可以判断基本类型是否相等,但是对于引用类型,该运算符是判断对象的内存地址是否一样。

  1. 字符串对象.compareTo(String otherstr) 按字典顺序比较两个字符串对象的大小
String str1 = new String("a");
String str2 = new String("b");
// 判断str1和str2两字符串的大小关系,相等返回0;str1在str2前返回负整数,str1在str2后返回正整数
System.out.pritnln(str1.compareTo(str2)); 
  1. 字符串对象.toLowerCase() 将字符串对象全部转换成小写
String str = new String("ABCDEFG");
String s = str.toLowerCase(); // 将str全部转换成小写:abcdefg
  1. 字符串对象.toUpperCase() 将字符串对象全部转换成大写
String str = new String("abcdefg");
String s = str.toUpperCase(); // 将str全部转换成大写:ABCDEFG
  1. 字符串对象.split(String sign) 将字符串对象根据给定的分割符进行拆分成数组
String str = new String(“Hello,World!”);
String []s = str.split(","); // 根据给定的分割符进行拆分成数组:Hello和World!
  1. 字符串对象.split(String sign , int limit) 将字符串对象根据给定的分割符拆分limit次
String str = new String(“Hello,World!你好,世界!”);
// 根据给定的分割符进行拆分成数组且只拆一次:Hello和World!你好,世界!
String []s = str.split("," , 1); 

格式化字符串

String类的**静态方法format()**用于创建格式化的字符串。

  • format(String format,Object…args)

    该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字
    符串使用本地默认的语言环境。

语法如下:
str.format(String format,Object…args)

format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外
的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

  • format(Local l,String format,Object…args)

format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。格式化过程中要应用的语言环境。如果l为null,则不进行本地化。

1.日期和时间字符串格式化

  • 日期格式化
Date date  = new Date(); // 创建Date对象date
String s = String.format("%te",date); //  通过静态方法format()对date进行格式化

Java从入门到精通_学习笔记05

  • 时间格式化
    Java从入门到精通_学习笔记05
  • 格式化常见的日期时间组合
    Java从入门到精通_学习笔记05
  • 常规类型格式化
    Java从入门到精通_学习笔记05

使用正则表达式

正则表达式通常被用于判断句,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义的字符串,这些特殊字符称为正则表达式的元字符。
Java从入门到精通_学习笔记05

在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“\”。

在正则表达式中可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如,reg = “[abc]4”,这样字符串a4、b4、c4都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如:

  • [^456]:代表4、5、6之外的任何字符。
  • [a-r]:代表a~r中的任何一个字母。
  • [a-zA-Z]:可表示任意一个英文字母。
  • [a-e[g-z]]:代表ae或gz中的任何一个字母(并运算)。
  • [a-o&&[def]]:代表字母d、e、f(交运算)。
  • [a-d&&[^bc]]:代表字母a、d(差运算)。

在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如,“A*”代表A可在字符串中出现0次或多次。

Java从入门到精通_学习笔记05

字符串生成器(StringBuilder类)

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。而J2SE 5.0新增了可变的字符序列String- Builder类,大大提高了频繁增加字符串的效率。

  1. append()方法
StringBuilder strb = new StringBuilder(""); // 创建字符串生成器对象
strb.append("hello"); // 在strb的末尾追加一个hello字符串
  1. insert(int offset , arg)方法
StringBuilder strb = new StringBuilder("hello");
strb.insert(5 , "world!"); // 在指定索引位置5处插入一个world!
  1. delete(int start , int end)方法
StringBuilder strb = new StringBuilder("hello,world!");
strb.delete(5,10); // 将从指定索引位置5到10位置的字符去掉