Loading

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();
posted @ 2021-03-07 20:19  qinuna  阅读(128)  评论(0编辑  收藏  举报