Java基础之——String类的基本使用
String
特点
-
内容永不改变
-
字符串是共享的
-
效果上:char[]数组
-
底层原理:byte[]字节数组
对于引用类型来说,==是进行地址值的比较
底层数组的获取:
byte[] bytes = "abc".getBytes();
创建
创建的字符串,存放在 **字符串常量池 **中
3+1中方法:三种构造方法,一种直接创建
三种构造方法:
public String();
public String(cha[] a); // 根据字符数组内容创建
public String(byte[] a); // 根据字节数组内容创建
char[] a = { 'r', 'u', 'n', 'o', 'o', 'b'};
String s = new String(a);
====================================
byte[] a = { 97, 98, 99 };
String s = new String(a); //输出abc
一种直接创建:
String s = "hello";
截取创建:
String(char a[],int offset,int length);
offset:开始位置
length:长度
String s = new String(a,2,4);
常用方法
获取长度
int len = s.length();
连接
- 使用 concat 连接
- 使用 + 连接(可以连接任何类型数据)
String s = "hello".concat("world");
String s = "hello" + "world";
获得字符
char charAt(int index);
char c = s.charAt(int index);
比较
public boolean equals(Object obj);
public boolean equalsIgnoreCase(String s); // 忽略大小写比较
int compareTo(String anotherString); // 按字典顺序比较
int compareToIgnoreCase(String str); // 忽略大小写按字典比较
System.out.println(str.compareTo(str2)); // str > str2:返回一个正数,否则返回一个负数
查找
int indexOf(int ch); // 字符 第一次 出现在字符串内的索引,没有则返回-1
int lastIndexOf(int ch); // 字符 最后一次 出现在字符串内的索引,没有则返回-1
int indexOf(int ch, int fromIndex); // 从指定位置开始搜索
int lastIndexOf(int ch, int fromIndex);
int indexOf(String str); // 返回 子字符串 第一次出现在字符串内的索引
int lastIndexOf(String str); // 返回 子字符串 最后一次出现在字符串内的索引
int indexOf(String str, int fromIndex); // 从指定位置开始
int lastIndexOf(String str, int fromIndex);
截取
String substring(int beginIndex); // 从指定位置开始,截取剩余字符为新的字符串
String substring(int beginIndex, int endIndex); // 截取指定位置,[begin,end)
转换
字符串 转 字符数组
char[] c = "Hello".toCharArray();
字符数组 转 String
String s = c.toString();
String 转 int
int n = Integer.parseInt(s);
int n = Integer.valueOf(s).intValue()
int 转 String
String s = String.valueOf(x);
String s = Integer.toString(x);
String s = x + ""; // 耗时大
分割
根据 正则表达式 分割
String[] split(String regex);
String[] split(String regex, int limit); // 限定次数:limit - 1
按照 参数规则 分割
String s = "aaa,bbb,ccc";
String[] arr = s.split(","); //以逗号为切割符
如果想定义多个分割符,用 |,如:,|=
表示分割符逗号和等号。如果按照 “.” 进行切分,必须写 “\.”
去除空格:忽略前导空格和尾部空格
String trim();
替换
替换所有就字符
String replace(char oldChar, char newChar);
替换子串
String replaceAll(String regex, String replacement);
String replaceFirst(String regex, String replacement);
前缀后缀匹配
boolean startsWith(String prefix); // 是否以指定的前缀开始
boolean startsWith(String prefix, int toffset); // 从指定索引开始的子字符串是否以指定前缀开始
boolean b = s.endsWith(String suffix); // 是否以指定的内容结束
大小写转换
大 转 小
String toLowerCase();
String toLowerCase(Locale locale); // 使用给定 Locale 的规则转换
小 转 大
String toUpperCase();
String toUpperCase(Locale locale);
日期格式化
Data data = new Data();
String s = String.format("%te",data); //返回某一天
转换符:
%te 一个月中的某一天
%tb 指定语言环境的月份简称 Feb、二月
%tB 指定语言环境的月份全称 February、二月
%tA 星期几全称 Monday、星期一
%ta 星期几简称 Mon、星期一
%tc 全部日期和时间信息 星期二 三月 25 13:37:22 CST 2008
%tY 4位年份 2008
%tj 一年中的第几天 085
%tm 月份 03
%td 一个月中的第几天 02
%ty 2位年份 08
返回此字符串的哈希码
int hashCode();
判断为空
isEmpty();
判断是否包含指定的字符系列
contains(CharSequence chars)
StringBuffer
使用场所:
与 String 的区别:类对象能够被多次修改,并不会产生新对象
基本使用:
StringBuffer s = new StringBuffer("hello");
常用方法:
// 添加字符串
StringBuffer append(String s)
int length()
//将给定索引处的字符设置为 ch
void setCharAt(int index, char ch)
// 反转
StringBuffer reverse()
// 移除子串
delete(int start, int end)
//将 int 参数的字符串表示形式插入此序列中
insert(int offset, int i)
//用str替代[start, end)
replace(int start, int end, String str)
// 返回容量
int capacity()
char charAt(int index)
// 确保容量至少等于指定的最小值
void ensureCapacity(int minimumCapacity)
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
int indexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
StringBuilder
使用场所:需要对字符串进行修改时
与 String 的区别:类对象能够被多次修改,并不会产生新对象
StringBuilder:字符串缓冲区支持可变的字符串,StringBuilder在内存中始终是一个数组,占用空间少,效率高。如果超出了StringBuilder的容量,会自动扩容
StringBuilder s = new StringBuilder("Hello");
StringBuilder s = new StringBuilder();
append(content)
s.append().append().append()... //链式
// 插入,可插入int、float、char、boolean等
insert(int offset arg)
s.insert(5,"world");
// 将当前StringBuilder对象转换为String对象
System.out.println(s.toString());
// 移出此序列的子字符串中的字符,从start开始,到 end-1 处如果不存在,则一直到序列尾部
delete(int start,int end)
s.delete(5,10);
StringBuffer 与 StringBuilder的区别
StringBuilder在Java 5中被提出,与StringBuffer最大的不同在于:StringBuilder 的方法不是线程安全的(不能同步访问)
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下 建议使用 StringBuilder 类
线程安全:使用 StringBuffer
String 与 StringBuilder的转换
String 转 StringBuilder
String str = "hello";
StringBuilder s = new StringBuilder(str);
StringBuilder 转 String
String str = s.toString();