Java常用类库--字符串处理String类
2019-04-06 本文已影响9人
白晓明
Java常用类库在项目开发中,经常用到以下类,现记录方便后续查阅。
1. 字符串处理
Java将字符串实现为String类型的对象。当创建String对象时,创建的字符串不能修改。其原因在于实现固定的、不能修改的字符串与实现能够修改的字符串相比效率更高。
对于需要修改的字符串,Java提供StringBuffer和StringBuilder来进行字符串修改。
1.1 String 类
我们通过查看Java API文档,可以看到String类是在 java.lang 包下,并且被声明为 final,这意味着其不能有子类。
String 类有多个构造器,用来初始化新创建的String对象。
String构造器
//String()创建空的String对象
String str = new String();
/*
* String(char[] value)创建由字符数组初始化的String实例
*/
char[] c = {'a', 'b', 'c', 'd', 'e', 'f'};
String strCharArr = new String(c);
/*
* String(char[] value, int offset, int count)创建由字符数组子范围作为初始化部分的String实例
* 字符数组子范围从offset(包含)到count(包含)
*/
String strCharArrOffsetCount = new String(c, 1, 4);
/*
* String(String original)构造一个与另外一个String对象包含相同字符的String对象
*/
String strOriginal = new String(strCharArrOffsetCount);
/*
* String(byte[] bytes)创建由字节数组初始化的String实例。
* String(byte[] bytes, int offset, int length)创建由字节数组子范围作为初始化部分的String实例
*/
byte[] bytes = {65, 66, 68, 79, 75, 80, 45};
String strBytes = new String(bytes);
String strBytesOffsetLength = new String(bytes, 2, 4);
/*
* String(StringBuffer buffer)从StringBuffer构造String实例
*/
StringBuffer sb = new StringBuffer("我是StringBuffer");
String strStringBuffer = new String(sb);
/*
* String(StringBuilder builder)从StringBuilder构造String实例
*/
StringBuilder builder = new StringBuilder("我是StringBuilder");
String strStringBuilder = new String(builder);
String方法
1. 获取字符串长度
//创建String对象
String str = new String("通过对我进行操作,学习String的各类常用方法!");
/*
* int length() 字符串长度是指字符串所包含的字符数量
*/
System.out.println(str.length());
2. 字符串拼接
//创建String对象
String str = new String("通过对我进行操作,学习String的各类常用方法!");
/*
* "+" 连接两个字符串
* concat(String str)将指定的字符串连接到该字符串的末尾
*/
System.out.println(str + "使用'+'运算符将我们连接在一起!");
System.out.println(str.concat("使用concat()方法将我在后面显示!"));
/*
* String join(CharSequence delimiter, CharSqeuence... elements)连接两个或更多的字符串
* join(CharSequence delimiter, Iterable<? extends CharSequence> elements)连接字符串列表中的数据
*/
String res = String.join(",", "白小源", "学习Java API!");
System.out.println(res);
Collection<String> strList = new ArrayList<>();
strList.add("白小源");
strList.add("28岁");
String resIter = String.join(", ", strList);
System.out.println(resIter);
3. 提取字符串
//创建String对象
String str = new String("通过对我进行操作,学习String的各类常用方法!");
/*
* char charAt(int index) 返回指定索引处的字符值
* void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 提取多个字符
* srcBegin 子串开始位置
* srcEnd 子串末尾的索引(不包含)
* dst 接受字符串的数组,数组必须足够大,能够容纳指定的子串
* dstBegin子串在接受字符串数组中的开始位置
* byte[] getBytes() 将字符保存到字节数组中
* char[] toCharArray()所有字符串转换为字符数组
*/
System.out.println(str.charAt(5));
char[] chars = new char[str.length()];
str.getChars(2, 8, chars, 1);
System.out.println(chars);
System.out.println(str.getBytes());
System.out.println(str.toCharArray());
4. 比较字符串
//创建String对象
String str = new String("通过对我进行操作,学习String的各类常用方法!");
/*
* boolean equals(Object anObject)比较两个字符串是否相等
* boolean equalsIgnoreCase(String anotherString)忽略大小写比较两个字符串是否相等
* boolean regionMatches(int toffset, String other, int ooffset, int len) 比较两个字符串特定部分是否相等
* boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)忽略大小写比较两个字符串特定部分是否相等
* ignoreCase 为true时,忽略大小写
* boolean startsWith(String prefix)指定的字符串是否以特定的前缀开始
* boolean endsWith(String suffix)指定的字符串是否以特定的后缀结尾
* int compareTo(String anotherString)按照字典顺序比较两个字符串
* < 0 调用字符串小于anotherString
* > 0 调用字符串大于anotherString
* = 0 两个字符串相等
* int compareToIgnoreCase(String str)按照字典顺序忽略大小写比较两个字符串
* == 判断两个字符串引用地址是否相同
*/
System.out.println("A".equals("a"));
System.out.println("A".equalsIgnoreCase("a"));
System.out.println("A".compareTo("a"));//小于
System.out.println("A".compareToIgnoreCase("a"));//相等
System.out.println("abc".regionMatches(1, "bcdf", 0, 2));
System.out.println("helloWorld.java".startsWith("hello"));
System.out.println("helloWorld.java".endsWith("java"));
String str1 = "bac";
String str2 = new String(str1);
System.out.println(str1 == str2);
/*
* boolean contentEquals(CharSequence cs)两个字符串是否相同
* boolean contentEquals(StringBuffer sb)两个字符串是否相同
*/
System.out.println("abcdefg".contentEquals("abcdefg"));
System.out.println("abcdefg".contentEquals(new StringBuffer("abcdefg")));
/*
* boolean matches(String regex)如果调用String对象与指定的正则表达式相同,则为true
*/
System.out.println("\t".matches("\u0009"));
5. 查找字符串
//创建String对象
String str = new String("通过对我进行操作,学习String的各类常用方法!");
/*
* int indexOf(int ch) 查找字符第一次出现的位置
* indexOf(int ch, int fromIndex)从指定索引处开始查找字符第一次出现的位置
* indexOf(String str)查找子串第一次出现的位置
* indexOf(String str, int fromIndex)从指定索引处开始查找子串第一次出现的位置
* 从fromIndex开始到str字符串末尾(从前往后查找)
* lastIndexOf(int ch)查找字符最后一次出现的位置
* lastIndexOf(int ch, int fromIndex)从指定索引处开始查找子串最后一次出现的位置
* lastIndexOf(String str)查找子串最后一次出现的位置
* lastIndexOf(String str, int fromIndex)从指定索引处开始查找子串最后一次出现的位置
* 从fromIndex开始到索引位置0(从后往前查找)
* 注:查找失败则返回-1
*/
System.out.println(str.indexOf(','));
System.out.println(str.indexOf('S', 8));
System.out.println(str.lastIndexOf("String"));
System.out.println(str.lastIndexOf("String", 15));
6. 修改字符串
String对象是不可变的,所以修改后的String对象是一个新创建的String对象。
//创建String对象
String str = new String(" 通过对str字符串进行操作, 学习String类的常用方法,并熟练掌握其中最常用的几种方法! ");
/*
* String substring(int beginIndex)根据索引位置截取子串
* substring(int beginIndex, int endIndex)根据索引位置的开始和结束截取子串
* 从beginIndex起始到endIndex(不包括)结束
* 注:可以结合indexOf()或lastIndexOf()方法获取索引值来截取子串
*/
System.out.println(str.substring(str.indexOf(',')));
System.out.println(str.substring(5, 12));
/*
* replace(char oldChar, char newChar)替换字符串中的字符
* replace(CharSequence target, CharSequence replacement)使用字符序列代替另一个字符序列
* replaceAll(String regex, String replacement)替换所有与指定的正则表达式匹配的字符串
* replaceFirst(String regex, String replacement)替换第一个与指定的正则表达式匹配的字符串
*/
System.out.println(str.replace(',', ','));
System.out.println(str.replace(",", ","));
System.out.println(str.replaceAll("\\,", ","));
System.out.println(str.replaceFirst("\\,", ","));
/*
* String trim()返回去掉字符串头部和尾部空格的新串
*/
System.out.println(str.trim());
7. 转换数据
/*
* String valueOf(boolean b)将布尔型转换为String对象
* valueOf(char c)将字节转换为String对象
* valueOf(char[] data)将字节数组转换为String对象
* valueOf(char[] data, int offset, int count)根据起始和终止索引位置将字节数组转换为String对象
* 包含终止位置索引
* valueOf(double d)将双精度浮点型数据转换为String对象
* valueOf(float f)将单精度浮点型数据转换为String对象
* valueOf(int i)将整型数据转换为String对象
* valueOf(long l)将长整型数据转换为String对象
* valueOf(Object obj)所有类型对象转换为String对象
*/
System.out.println(String.valueOf("A".equals("a")));
System.out.println(String.valueOf('m'));
char[] data = {'a','b','c','d','e'};
System.out.println(String.valueOf(data));
System.out.println(String.valueOf(data, 1, 3));
System.out.println(String.valueOf(22.3689888));
System.out.println(String.valueOf(1.23333f));
System.out.println(String.valueOf(1253));
System.out.println(String.valueOf(12345678L));
System.out.println(String.valueOf(new Person("张三", "123")));
8. 字符串中大小写转换
/*
* String toLowerCase()将字符串中的所有大写字符转换为小写
* toLowerCase(Locale locale)将字符串中所有大写字符转换为指定区域的小写
* String toUpperCase()将字符串中的所有小写字符转换为大写
* toUpperCase(Locale locale)将字符串中所有小写字符转换为指定区域的大写
*/
System.out.println("ABCdefg".toLowerCase());
System.out.println("ABCdefg".toLowerCase(Locale.CHINESE));
System.out.println("ABCdefg".toUpperCase());
System.out.println("ABCdefg".toUpperCase(Locale.CHINA));
9. 字符串包含
/*
* boolean contains(CharSequence s)是否包含指定的字符串
*/
System.out.println("abcdefg".contains("de"));
10. 格式化字符串
/*
* String format(Locale l, String format, Object... args)格式化字符串
* format(String format, Object... args)
*/
System.out.println("100的一半是:" + String.format("%d %n", 100 / 2));
数据类型转换
转换符 | 说明 |
---|---|
%s | 字符串类型 |
%c | 字符类型 |
%b | 布尔类型 |
%d | 整数类型(十进制) |
%x | 整数类型(十六进制) |
%o | 整数类型(八进制) |
%f | 浮点类型 |
%a | 十六进制浮点类型 |
%e | 指数类型 |
%g | 通用浮点类型 |
%h | 散列码 |
%% | 百分比类型 |
%n | 换行符 |
%tx | 日期与时间类型(x代表不同的日期和时间转换符,如c、F、D、r、T、R) |
11.是否为空
/*
* boolean isEmpty()当字符串长度为0时,为true
*/
System.out.println(new String().isEmpty());
12. 字符串转数组
/*
* String[] split(String regex)根据规则将字符串转为String数组
* String[] split(String regex, int limit)根据limit值进行分解数组。
* 0完全分解,不包含后跟的空字符串;为负数则完全分解;为正数则根据limit值来分解
*/
System.out.println("a,b,c,d,f,e".split(","));
String[] strLimitArr = "a,b,c,d,f,e,".split(",", 3);
for (int i = 0; i < strLimitArr.length; i++) {
System.out.println(strLimitArr[i]);
}
String类常用方法在项目开发中常用的String类方法