Java基础学习笔记(六)——String

Java基础学习笔记(六)—— String

Life was like a box of chocolates, you never know what you’re gonna get.

| @Author:TTODS


String是java中不可变字符串类。属于java.lang 包,它是java非常重要的类。
所谓不可变字符串类,与之对应的是可变字符串,他们的区别在于当字符串进行拼接等修改操作时,不可变字符串会创建新的字符串对象,为可变字符串不会创建新对象。

此文章只记录了String 的一些常用操作,更多详情,请查阅官方文档:http://www.matools.com/api/java8

String的构造方法
String()

创建一个空字符序列,但由于java中的String是不可变的,所以此构造方法是不必要的。

String str = new String();
String(String original)

使用另一个String对象,进行对本进行初始化

String str = "This is str";
String str1 = new String(str);
String(char[] value)

使用字符串数组初始化String对象

char[] chs = {'H','e','l','l','o',',', 'W','o','r','l','d'};
String str = new String(chs);
System.out.print(str);//输出Hello, World
String(char[] value,int offset,int count)

使用字符数组的索引为offset开始,长度为count的子数组初始化String对象。
当offset和offset+count-1不在char数组的索引范围内时会报错
IndexOutOfBoundsException

char[] chs = {'H','e','l','l','o',',', 'W','o','r','l','d'};
String str = new String(chs,6,5);
System.out.print(str);//输出 World
String(byte[] bytes)
使用平台默认的字符集来解码默认的字节数组
byte[] byteArray = {97,98,99,100,101,102};
String str = new String(byteArray);
System.out.print(str);//输出 abcde
String的常用方法
length()

返回字符串中字符的数量

String str = new String("Hello, World");
System.out.print(str.length());//输出 12(逗号后面有空格)
isEmpty()

判断字符串是否为空,为空就返回True,否则返回Flase

charAt(int index)

当(index<0||index>=str.length())时,报错IndexOutOfBoundsException

String str = new String("Hello, World");
System.out.print(str.charAt(7));//输出W
equals(Object anObject)

比较两个字符串对象的内容是否相等,java中对于引用数据类型,"=="比较的是对象本身,即存储对象的首地址,下例中str1与str2是两个不同的对象,所以str1==str2返回false.

String str1 = new String("Hello, world");
String str2 = new String("Hello, world");
System.out.println(str1.equals(str2));//输出true
System.out.print(str1==str2);//输出false 
contentEquals(StringBuffer sb)
equalsIgnoreCase(String anotherString)

比较两个字符串对象的内容是否相等(忽略大小写)

String str1 = new String("Hello, world");
String str2 = new String("HELLO, WORLD");
System.out.println(str1.equals(str2));//false
System.out.print(str1.equalsIgnoreCase(str2));//true
compareTo(String anotherString)

字符串的字典序比较,相同返回0,该String字典序小于anotherString,返回一个负数,大於则返回一个正数,对于该数字的值分几种情况:
① 两字符串相等,返回0(如下面第1行输出);
② 两字符串在索引区间[0,shortStr.length()-1)(shortStr是长度较短的字符串)内有不同字符,则返回第一个不同字符的差(如下面第2、3行输出)。
③ 两字符串在索引区间[0,shortStr.length()- 1)(shortStr是长度较短的字符串)内没有有不同字符,但是两字符串的长短不一,则返回两字符串的长度差(如下面第四行输出)

String str1 = new String("Hello, World");
String str2 = new String("Hello, World");
String str3 = new String("ABCDE");
String str4 = new String("abcde");
String str5 = new String("Hello, World. Hello, TTODS..");
System.out.println(str1.compareTo(str2));//输出 0 (两个字符串的内容相等)
System.out.println(str3.compareTo(str4));//输出 - 32  ('A'- 'a')
System.out.println(str4.compareTo(str3));//输出 32   ('a'-'A')
System.out.println(str1.compareTo(str5));//输出 - 16
startsWith(String prefix)

判断字符串是否以特定的前缀开头

startsWith(String prefix,int toffset)

判断字符串的子串[toffset:]是否以特定的前缀开头

 String str = new String("Hello, world. Hello, TTODS..");
System.out.println(str.startsWith("Hel"));//true
System.out.print(str.startsWith("Hel",14));//true
endsWith(String suffix)

测试此字符串是否以指定的后缀结尾。

indexOf(int ch)

在字符串中查找字符ch, 返回找到的第一个的字符ch的索引,若没有找到则返回-1;

indexOf(int ch, int fromIndex)

在字符串中从索引fromIndex开始查找字符ch, 返回找到的第一个的字符ch的索引,若没有找到则返回-1;

String str = new String("Hello, world. Hello, TTODS..");
System.out.println(str.indexOf('H'));//输出 0
System.out.println(str.indexOf('H',1));//输出 14
lastIndexOf(int ch)

在字符串中从后往前查找字符ch, 返回字符串中索引第一个的字符ch的索引,若没有找到则返回-1;

lastIndexOf(int ch, int fromIndex)

在字符串中从fromIndex开始从后往前查找字符ch, 返回找到的第一个的字符ch的索引,若没有找到则返回- 1;

indexOf(String str)

在字符串中查找字符串str, 返回找到的第一个的字符ch的索引,若没有找到则返回- 1;

indexOf(String str,int fromIndex)

在字符串中从后往前查找字符串str, 返回字符串中索引第一个的字符ch的索引,若没有找到则返回-1;

String str = new String("Hello, world. Hello, TTODS..");
System.out.println(str.indexOf("Hello"));// 输出 0
System.out.println(str.indexOf("Hello",1));// 输出 14
lastIndexOf(String str)

在字符串中从后往前查找字符串str, 返回字符串中索引第一个的字符ch的索引,若没有找到则返回-1;

lastIndexOf(String str,int fromIndex)

在字符串中从fromIndex开始从后往前查找字符串str, 返回找到的第一个的字符ch的索引,若没有找到则返回-1;

substring(int beginIndex)

类似于python中的str[beginIndex:],获取String 索引beginIndex(包含)到最后的子串

substring(int beginIndex,int endIndex)

类似于python中的str[beginIndex:endindex],获取String 索引beginIndex(包含)到endindex(不包含)的子串

String str = new String("Hello, world. Hello, TTODS..");
System.out.println(str.substring(14));
System.out.println(str.substring(0,14));
concat(String str)

将参数字符串连接到此字符串结尾,注意由于是不可变的,当参数字符串长度不为0时,将创建一个新的String对象

String str1 = new String("Hello, World! ");
String str11 = new String("Hello, World");
System.out.println(str1 == str1.concat("")); //输出 true (参数字符串长度为0,返回字符串本身)
String str2 = new String("Hello, TTODS.!");
System.out.println(str1.concat(str2)); //输出 Hello, World! Hello, TTODS.!
System.out.print(str11==str11.concat(str2)); //输出 false (参数字符串长度不为0,拼接后返回的对象是一个新建的对象,并不是原来的String对象)
replace(char oldChar,char newChar)

用newChar替代字符串中的oldChar。

String str = new String("He??o, Wor?d!");
System.out.print(str.replace('?', 'l')); //输出 Hello, world!
matches(String regex)

判断字符串是否匹配一个正则表达式,值得注意的时,正则表达式中的'\'在String中需要转义即"\\"

String str = new String("2020年02月26日");
System.out.println(str.matches("\\d{4}年\\d{2}月\\d{2}日"));
contains(CharSequence s)

当且仅当此字符串包含指定的char值序列时才返回true。

replaceFirst(String regex,String replacement)

用指定字符串代替正则表达式匹配到的第一个子字符串

replaceAll(String regex,String replacement)

用指定字符串代替正则表达式匹配到的所有子字符串

String str = new String("2020年02月26日");
System.out.println(str.replaceAll("[年月日]"," "));//输出 2020 02 26
split(String regex)

将此字符串拆分为给定的regular expression的匹配。

String str1 = new String("2020年02月26日");
String[] strArray = str1.split("[年月日]");
for(String str :strArray)
	System.out.printf("%s\n",str);

输出

2020
02
26

join(CharSequence delimiter,CharSequence… elements)

用指定的定界符,连接多个字符序列

String str = String.join("","Do","one","thing","at","a","time","and","do","well!");
System.out.print(str);
Do one thing at a time and do well!
toLowerCase()

将字符串中的大写转化为小写

toUpperCase()

将字符串中的小写转化为大写

trim()

去掉字符串首尾空格

format(String format,Object… args)

使用指定的格式字符串和参数返回格式化的字符串。

String str = String.format("%4d年%2d月%2d日",2020,2,26);
System.out.print(str);// 输出 2020年 2月26日

- THE END -
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章