字符串处理(一)
一、String类
1、String类构造函数表
String() 初始化一个新创建的 String 对象,使其表示一个空字符序列。 |
String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String 。 |
String(byte[] bytes,
Charset charset)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String 。 |
String(byte[] ascii,
int hibyte) 已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset 、字符集名称,或使用平台默认字符集的
String 构造方法。 |
String(byte[] bytes,
int offset, int length) 通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String 。 |
String(byte[] bytes,
int offset, int length, Charset charset)
通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String 。 |
String(byte[] ascii,
int hibyte, int offset, int count)
已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset 、字符集名称,或使用平台默认字符集的
String 构造方法。 |
String(byte[] bytes,
int offset, int length, String charsetName)
通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String 。 |
String(byte[] bytes,
String charsetName)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String 。 |
String(char[] value)
分配一个新的 String ,使其表示字符数组参数中当前包含的字符序列。 |
String(char[] value,
int offset, int count) 分配一个新的 String ,它包含取自字符数组参数一个子数组的字符。 |
String(int[] codePoints,
int offset, int count) 分配一个新的 String ,它包含
Unicode 代码点数组参数一个子数组的字符。 |
String(String original)
初始化一个新创建的 String
对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。 |
String(StringBuffer buffer)
分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。 |
String(StringBuilder builder)
分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。 |
2、五种比较常用的构造方法(代码)
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class javaTest2 implements javaTest1 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str=new String();
str="abc";
String str1=new String("abc");
char []a={'a','b','c'};
String str2=new String(a);
byte[]b={'a','b','c'};
String str3=new String(b,"UTF-8");
StringBuffer strb=new StringBuffer("abc");
String str4=new String(strb);
System.out.println("str:"+str+" str1:"+str1+" str2:"+str2+" str3:"+str3+" str4:"+str4);
}
}
运行结果:
str:abc str1:abc str2:abc str3:abc str4:abc
3、String类相关的函数表
char |
charAt(int index) 返回指定索引处的 char 值。 |
int |
codePointAt(int index)
返回指定索引处的字符(Unicode 代码点)。 |
int |
codePointBefore(int index)
返回指定索引之前的字符(Unicode 代码点)。 |
int |
codePointCount(int beginIndex,
int endIndex) 返回此 String 的指定文本范围中的 Unicode
代码点数。 |
int |
compareTo(String anotherString)
按字典顺序比较两个字符串。 |
int |
compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。 |
String |
concat(String str)
将指定字符串连接到此字符串的结尾。 |
boolean |
contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
boolean |
contentEquals(CharSequence cs)
将此字符串与指定的 CharSequence 比较。 |
boolean |
contentEquals(StringBuffer sb)
将此字符串与指定的 StringBuffer 比较。 |
static String |
copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。 |
static String |
copyValueOf(char[] data,
int offset, int count) 返回指定数组中表示该字符序列的 String。 |
boolean |
endsWith(String suffix)
测试此字符串是否以指定的后缀结束。 |
boolean |
equals(Object anObject)
将此字符串与指定的对象比较。 |
boolean |
equalsIgnoreCase(String anotherString)
将此 String 与另一个 String
比较,不考虑大小写。 |
static String |
format(Locale l, String format, Object... args)
使用指定的语言环境、格式字符串和参数返回一个格式化字符串。 |
static String |
format(String format, Object... args)
使用指定的格式字符串和参数返回一个格式化字符串。 |
byte[] |
getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte
数组中。 |
byte[] |
getBytes(Charset charset)
使用给定的 charset 将此 String
编码到 byte 序列,并将结果存储到新的 byte 数组。 |
void |
getBytes(int srcBegin,
int srcEnd, byte[] dst, int dstBegin)
已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes()
方法,该方法使用平台的默认字符集。 |
byte[] |
getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte
数组中。 |
void |
getChars(int srcBegin,
int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。 |
int |
hashCode()
返回此字符串的哈希码。 |
int |
indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。 |
int |
indexOf(int ch,
int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
int |
indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。 |
int |
indexOf(String str,
int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
String |
intern()
返回字符串对象的规范化表示形式。 |
boolean |
isEmpty()
当且仅当 length() 为
0 时返回 true。 |
int |
lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。 |
int |
lastIndexOf(int ch,
int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
int |
lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。 |
int |
lastIndexOf(String str,
int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
int |
length()
返回此字符串的长度。 |
boolean |
matches(String regex)
告知此字符串是否匹配给定的正则表达式。 |
int |
offsetByCodePoints(int index,
int codePointOffset) 返回此 String 中从给定的
index 处偏移 codePointOffset 个代码点的索引。 |
boolean |
regionMatches(boolean ignoreCase,
int toffset, String other, int ooffset,
int len) 测试两个字符串区域是否相等。 |
boolean |
regionMatches(int toffset,
String other,
int ooffset, int len) 测试两个字符串区域是否相等。 |
String |
replace(char oldChar,
char newChar) 返回一个新的字符串,它是通过用 newChar
替换此字符串中出现的所有 oldChar 得到的。 |
String |
replace(CharSequence target, CharSequence replacement)
使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
String |
replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String |
replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
String[] |
split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
String[] |
split(String regex,
int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
boolean |
startsWith(String prefix)
测试此字符串是否以指定的前缀开始。 |
boolean |
startsWith(String prefix,
int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
CharSequence |
subSequence(int beginIndex,
int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
String |
substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。 |
String |
substring(int beginIndex,
int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
char[] |
toCharArray()
将此字符串转换为一个新的字符数组。 |
String |
toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
String |
toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
String |
toString()
返回此对象本身(它已经是一个字符串!)。 |
String |
toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
String |
toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
String |
trim()
返回字符串的副本,忽略前导空白和尾部空白。 |
static String |
valueOf(boolean b)
返回 boolean 参数的字符串表示形式。 |
static String |
valueOf(char c)
返回 char 参数的字符串表示形式。 |
static String |
valueOf(char[] data)
返回 char 数组参数的字符串表示形式。 |
static String |
valueOf(char[] data,
int offset, int count) 返回 char
数组参数的特定子数组的字符串表示形式。 |
static String |
valueOf(double d)
返回 double 参数的字符串表示形式。 |
static String |
valueOf(float f)
返回 float 参数的字符串表示形式。 |
static String |
valueOf(int i)
返回 int 参数的字符串表示形式。 |
static String |
valueOf(long l)
返回 long 参数的字符串表示形式。 |
static String |
valueOf(Object obj)
返回 Object 参数的字符串表示形式。 |
4、字符串的常用操作
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class javaTest2 implements javaTest1 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str=new String();
str="ABC";
String str1=new String("abc");
char []a={'a','b','c'};
String str2=new String(a);
byte[]b={'a','b','c'};
String str3=new String(b,"UTF-8");
StringBuffer strb=new StringBuffer("abc");
String str4=new String(strb);
System.out.println("str:"+str+" str1:"+str1+" str2:"+str2+" str3:"+str3+" str4:"+str4);
//获取字符串长度
System.out.println("str长度:"+str.length());
//字符串连接(两种)
str=str+str1;
System.out.println("str:"+str);
str2=str2.concat(str3);
System.out.println("str2"+str2);
//字符串比较(三种方法)
if(str.compareTo(str2)>0){
System.out.println("str排在str2之前!");
}
if(str.compareTo(str2)<0){
System.out.println("str排在str2之后!");
}else{
System.out.println("str和str2字符内容相同!");
}
if(str.equals(str2)){
System.out.println("str和str2字符内容相同!");
}else{
System.out.println("str和str2字符内容不同!");
}
if(str.equalsIgnoreCase(str2)){
System.out.println("str和str2字符表达相同!");
}else{
System.out.println("str和str2字符表达不同!");
}
//字符串截取
//从开始位置为2截取到末尾
String str5=str.substring(2);
System.out.println("str5:"+str5);
//从位置2-4截取
String str6=str2.substring(2, 4);
System.out.println("str6:"+str6);
//字符串查找
System.out.println("abc出现在str字符变量的第"+str.indexOf("abc")+"个位置上~");
System.out.println("abc出现在str字符变量的第"+str.indexOf("abc",1)+"个位置上~");
//查询不存在的字符串时
System.out.println("abc出现在str字符变量的第"+str.indexOf("abd",1)+"个位置上~");
//字符串大小写转换
String str7=str5.toUpperCase();
System.out.println("str5:"+str5);
System.out.println("str7:"+str7);
str7=str5.toLowerCase();
System.out.println("str5:"+str5);
System.out.println("str7:"+str7);
//字符串内容替换(三种都需要有返回值,并不是直接对目标字符处理)
String str8=str7.replace('c', 'C');
System.out.println("str8:"+str8);
String str9=str8.replaceFirst("ab", "AB");
System.out.println("str9:"+str9);
String str10=str9.replaceAll("C", "c");
System.out.println("str10:"+str10);
//获取字符串某位置的字符
char c1=str10.charAt(2);
System.out.println("c1:"+c1);
//判断一个字符串中是否有要查找的字符(有的话返回true、否则返回false)
System.out.println("str10中是否含有AB字符串:"+str10.contains("AB"));
//判断字符串str10是否以cA开头
System.out.println("str10是否以cA开头:"+str10.startsWith("cA"));
//判断字符串Str10是否以Bc结尾
System.out.println("Str10是否以Bc结尾:"+str10.endsWith("Bc"));
//去掉前后的空白字符(但不能去掉中间的空白字符)
str10=" "+str10+" "+"ac"+" ";
System.out.println("str10:"+str10);
String str11=str10.trim();
System.out.println("str11:"+str11);
//如果需要去掉字符串中间的空白符需要使用replace
String str12=str11.replace(" ", "");
System.out.println("str12:"+str12);
}
}
运行结果:
str:ABC str1:abc str2:abc str3:abc str4:abc
str长度:3
str:ABCabc
str2abcabc
str排在str2之后!
str和str2字符内容不同!
str和str2字符表达相同!
str5:Cabc
str6:ca
abc出现在str字符变量的第3个位置上~
abc出现在str字符变量的第3个位置上~
abc出现在str字符变量的第-1个位置上~
str5:Cabc
str7:CABC
str5:Cabc
str7:cabc
str8:CabC
str9:CABC
str10:cABc
c1:B
str10中是否含有AB字符串:true
str10是否以cA开头:true
Str10是否以Bc结尾:true
str10: cABc ac
str11:cABc ac
str12:cABcac
总结:查询完String类的API文档,没有找到String类对应的插入和删除方法,可以用两种思路去解决这个问题:
1、通过String类给定的replace方法,将想要删除和插入的语句通过replace替换成相应的字符串
2、通过转换将String类字符串,转换成StringBuffer类型,然后通过调用StringBuffer的insert()和delete()方法实现。