Java常用类库--字符串处理String类

在项目开发中,经常用到以下类,现记录方便后续查阅。

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 elements)连接字符串列表中的数据
 */
String res = String.join(",", "白小源", "学习Java API!");
System.out.println(res);
Collection 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]);
}

若使用到其他接口则访问官方API查看

在项目开发中常用的String类方法

String类常用方法

你可能感兴趣的:(Java常用类库--字符串处理String类)