String类字符串
1.字符串的常用方法:(字符串构造方法,字符串仍然是类)
1和4为常用字符串对象产生方式
2.字符串String本身并没有存储数据,数据都在内部的字符数组中存储,String类只是将字符数组套了一个类,并向外部提供了很多方便好用的方法而已
String = char[]+各种好用的方法
JDK中String类的源码
3.String对象的比较
使用"==”比较两个字符串对象是否指向相同的地址
String s1 = new String( “hello”);
string s2 = new String( “hello”);
string s.3= s1;
// fasle
System.out.printin(s1 s2);
// true
system.out.println(s1 s3);
使用equals方法判断两个字符串对象是否内容相同,按照Unicode编码一个个字符进行比较,当两个字符串的字符数组对应的内容完全相同,equals才返回true
String s1 = new String( “hello” );
String s2 = new String( “hello”);
String s3= s1;
String s4 = new String( “HELLO” );
// true
System.out.println(s1.equals(s2));
// false
system.out.println(s1.equals(s4));
equalsIngnoreCase不区分大小写的字符串对象比较:
// true
System.out.println(s1.equalsIngnoreCase(s4));
使用compareTo方法进行两个字符串的大小比较(默认区分大小写)
1.先按照两个字符串对应的字符进行编码比较,若碰到第一个不相等的字符,直接返回编码差值
2.若前n个字符完全相等(n是两个字符串中的最小值),返回值为两个字符串的长度差
字符串查找
字符串查找:其实本质就是在内部的字符数组上进行遍历寻找
char charAt(int index):返回字符串上指定索引位置的字符
String str = “absdef”;
//查找字符串第四个位置的元素
char c = str.charAt( 3);
System.out.println( c); // d
取出任意一个字符串中的每个字符并输出 (循环+ charAt)
String str = “absdef”;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
system.out.print(c + " ");
}
判断一个字符是否是数字字符
boolean contains(String regex):查找当前字符串中是否包含指定格式的字符串regex
判断str中是否包含子串regex(自身也算子串):
String str = “abcdef” ;
System.out.println(str.contains(“bcd”)); // true
System.out.println(str.contains(“bcd”)); // true
System.out.println(str.contains(“bse”)); //false
从前向后寻找指定内容 方法:
int indexOf(int ch)
// 返回ch第一次出现的位置,没有返回-1
int indexOf(int ch, int fromIndex)
// 从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)
// 返回str第一次出现的位置,没有返回-1
// contains方法其实就是根据indexOf方法的返回值来实现的
int indexOf(String str, int fromIndex)
// 从fromIndex位置开始找str第一次出现的位置,没有返回-1
从后向前寻找指定内容方法:
int lastIndexOf(int ch)
// 从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch, int fromIndex)
// 从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)
// 从后往前找,返回str第一次出现的位置,没有返回-1
int lastlndexOf(String str, int fromlndex)
// 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1
字符串与其他类型的转换
字符串和数值互相转换
(当传入的是自定义类型时,默认会调用toString进行转换,要求我们在自定义的类型中覆写 toString方法)
将字符串对象转为相应的基本类型:使用各个包装类的parseXXX方法来进行转换,这个转换有可能会报错,当字符串中出现非数字时,会报错
(转为布尔值时,若出现不合法的布尔值字符串,统一转为false处理)
字符串转数组:
当进行网络编程或文件IO操作,需要将字符串序列化为一个个字节
str -> byte[] getBytes() : byte[ ]按照当前操作系统默认编码转为字节数组
编码∶将任意字符按照指定的规则转为数字就称为编码
比较常用的编码规则︰
ASCII:专门针对英文字母的编码, a’->97,不管哪种编码格式,针对英文字母的转换都会采用ASCII的转换规则
GBK∶专门针对中文的编码,包含繁体中文·一个中文字符转为GBK编码对应2个字节
GB2312∶只包含简体中文
UTF-8:世界上所有语言都可以通过UTF-8来得到转换― 一个中文字符转为UTF-8 3个字节
字符串格式化
—>类似prinf的格式化输出,只不过此时不输出,只是将字符串按照指定格式转换~
String.format(格式);
字符串替换操作
Stringstr = “hello world”;
System.out.println(str.replaceAll( “l”, “2”)); // he22o worl2d
System.out.println(str.replaceFirst( “l”, “2”)); // he2lo world
有些字在特殊场合无法输出,背后就是指定字符串的识别和替换,识别特定的字符串,如转换为*
字符串截取
String substring(int beginIndex) [start…str.length)
// 从指定索引截取到结尾
String substring(int beginIndex, int endlndex) [start,end)
// 截取部分内容
思考,如何通过 截取+转换 实现传入任意单词,实现首字母大写的操作
字符串拆分
String[ ] split(String regex)
// 按照指定格式regex将原字符串拆分为若干个子字符串
String[ ] split(String regex, int limit)
// 按照regex将原字符串拆分,限制拆分后字符串数组的长度为limit长度
当limit<拆分后的字符串数组长度
当拆分达到指定limit长度,字符串就不再拆分了(包括超出长度的情况)
在字符串拆分时,遇到特殊的拆分格式,需要特殊处理
拆分一个IP地址︰根据IP地址来判断用户的区域
192.168.1.1 =>本机地址
"."操作符在Java中属于特殊字符引用操作符
碰到类似字符拆分都需要进行转义处理 “\.” ( & | + - * / 等等)