字符串(String)详解以及StringBuffer和字符串编码、正则表达式
⼀.String
字符串有⼀下常见特点:
1. String是final类型的
- String是final类型的,代表String是不可继承的,任何⼀个类试图继承String类型都将发⽣错误。
2. String的创建⽅式
- ⼀种直接初始化,第⼆种是通过new关键字创建
3. String对象可以通过“+”串联
- String s = “abc”;
- String a =1+2+s;//结果是a=3abc
- String b = s+1+2+3;//结果是b=abc123
4. String类的本质是字符数组char[]
- String类的本质是字符数组,并且其值不可改变,如果值改变,则不再是原来的对象。
5. String池
- ⽆论是通过new关键字创建字符串还是直接初始化字符串,它们都在Java的堆中创建。在Java中有⼀个“字符数据池”的内存管理机制。例如:String str=”abc”,其中Java会先去“String池”搜索“abc”这个字符串,如果有,则将字符串赋值给str,如果没有则⽣成⼀个新的字符串“abc”赋值给str;⽽new创建字符串“abc”,则不从字符串池⾥⾯寻sbc,⽽是直接⽣成⼀个新的字符串“abc”赋值给str。
- 由此可知直接赋值⽐new效率要⾼。
6. 字符串常⽤⽅法
字符串的常见构造⽅法
String()
初始化⼀个新创建的 String 对象,使其表⽰⼀个空字符序列。
String(byte[] bytes)
通过使⽤平台的默认字符集解码指定的 byte 数组,构造⼀个新的 String。
String(byte[] bytes, Charset charset)
通过使⽤指定的 charset 解码指定的 byte 数组,构造⼀个新的 String。
String(String original)
初始化⼀个新创建的 String 对象,使其表⽰⼀个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String(char[] value)
分配⼀个新的 String,使其表⽰字符数组参数中当前包含的字符序列。
字符串的常见⽅法
char charAt(int index)
返回指定索引处的 char 值。
int compareTo(String anotherString)
按字典顺序⽐较两个字符串。如果按字典顺序此String对象位于参数字符串之前,则⽐较结果为⼀个负整数。如果在之后,则⽐较结果为⼀个正整数,。如果相等就结果为0。compareTo只在equals(Object)返回true是才返回0。
String concat(String str)
将指定字符串连接到此字符串的结尾。
boolean contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
boolean equals(Object anObject)
将此字符串与指定的对象⽐较。
boolean equalsIgnoreCase(String anotherString)
将此 String 与另⼀个 String ⽐较,不考虑⼤⼩写。
byte[] getBytes()
使⽤平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到⼀个新的 byte 数组中。
byte[] getBytes(Charset charset)
使⽤给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
byte[] getBytes(String charsetName)
使⽤指定的字符集将此 String 编码为 byte 序列,并将结果存储到⼀个新的 byte 数组中。
使⽤指定的字符集将此 String 编码为 byte 序列,并将结果存储到⼀个新的 byte 数组中。 int hashCode()
返回此字符串的哈希码。
int indexOf(int ch)
返回指定字符在此字符串中第⼀次出现处的索引。
int indexOf(String str)
返回指定⼦字符串在此字符串中第⼀次出现处的索引。
int indexOf(String str, int fromIndex)
返回指定⼦字符串在此字符串中第⼀次出现处的索引,从指定的索引开始。
boolean isEmpty()
当且仅当 length() 为 0 时返回 true。
int lastIndexOf(int ch)
返回指定字符在此字符串中最后⼀次出现处的索引。
int lastIndexOf(String str)
返回指定⼦字符串在此字符串中最右边出现处的索引。
int length()
返回此字符串的长度。
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
String replace(char oldChar, char newChar)
返回⼀个新的字符串,它是通过⽤ newChar 替换此字符串中出现的所有 oldChar 得到的。 String replaceAll(String regex, String replacement)
使⽤给定的 replacement 替换此字符串所有匹配给定的正则表达式的⼦字符串。
String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
String substring(int beginIndex)
返回⼀个新的字符串,它是此字符串的⼀个⼦字符串。
char[] toCharArray()
将此字符串转换为⼀个新的字符数组。
String toLowerCase()
使⽤默认语⾔环境的规则将此 String 中的所有字符都转换为⼩写。
![
String toString()
返回此对象本⾝(它已经是⼀个字符串!)。
String toUpperCase()
使⽤默认语⾔环境的规则将此 String 中的所有字符都转换为⼤写。
String trim()
返回字符串的副本,忽略前导空⽩和尾部空⽩。
String字符串的简单使⽤例⼦
import java.util.Arrays;
public class J {
public static void main(String[] args) {
// TODO ⾃动⽣成的⽅法存根
String str = “abcde”;
String str2 = ” abcde “;
String str3 = new String(“abcde”);
//去掉两头的空格,不管多少个。这是防⽌⽤户输⼊账号的时候不⼩⼼输⼊了空格
String trim = im();
System.out.println(trim);//abcde
System.out.println(str==str3);//false,因为“==”是表⽰对象相等
System.out.println(str.equals(str3));//true,因为equals是表⽰内容是否相等
//转成char数组
char[] ch = CharArray();
System.out.String(ch));//[a, b, c, d, e]
for (int i = 0; i < ch.length; i++) {
System.out.print(str.charAt(i)+”,”);//每次返回⼀个字符a,b,c,d,e,
}
System.out.println();
//转成byte数组
byte[] by = Bytes();
System.out.String(by));//[97, 98, 99, 100, 101]
//————————————————————–1字符串转换为char数组、byte数组 //全部转成⼤写
String a2 = UpperCase();//a2=ABCDE
//全部转成⼩写
String a3 = a2.toLowerCase();//a3=abcde
//str是否包含在a3中
boolean f = ains(a3);//f=true
//str是以字符串e结尾的吗
boolean f2 = dsWith(“e”);//f2=true
//str是以字符串a开头的吗
boolean f3 = str.startsWith(“a”);//f3=true
/
/————————————————-2⼤⼩写转换,以及某字符串是否存在
String ss = “abcdefggg”;
//从第⼆个字符开始,⼀直到最后,也就是bcdefggg
String s = ss.substring(1);
//从第⼆个字符开始,⼀直到第四个字符,但是不包含第四个字符,也就是bc
String s2 = ss.substring(1, 3);
//返回第⼀个”e”的位置,也就是4 如果没有则返回-1
int i = ss.indexOf(“e”);
//返回最后⼀个”g”的位置,也就是8 如果没有则返回-1
int i2 = ss.lastIndexOf(“w”);
//————————————————–3字符串的截取
/
/把字符串按照正则表达式将字符串转换成字符串数组
String ss2 = “a,b,c,d,e,w,/a,+5”;
//现在代表ss2数组全部去掉,号;ss2.split(“,”,3)这个表⽰ss2下标0~3之间的去掉,号 String [] c = ss2.split(“,”);
for (int j = 0; j < c.length; j++) {//”abcdew/a+5”
System.out.print(c[j]);
}
//———————————————————4正则表达式将字符串转换成字符串数组
}
}
7.hashCode和equals⽅法
hashCode和equals⽅法都继承与Object。
StringBuffer类的使⽤
⼆. StringBuffer类和StringBuilder类的使⽤
(StringBuffer类和StringBuilder类的所有⽅法和⽤法都⼀致,只不过:
StringBuffer是线程安全的,速度慢点,适合多线程使⽤
StringBuilder是线程不安全的,速度快点,适合单线程使⽤
String是“字符串常量”,也就是不可改变的对象。)
- Java中的String是不可改变的,值⼀旦变了,就是变成新的对象,⽽创建对象的过程是⽐较消耗性能的,因此,就产⽣了 StringBuffer 类, StringBuffer类可以很⽅便的修改字符串的内容,但是对象不会改变。
- String中的⼤部分⽅法在 StringBuffer中都可以使⽤。 StringBuffer是线程安全的,但它是final类型,也是不可以继承的。
1.StringBuffer的常见构造
StringBuffer()
构造⼀个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(CharSequence seq)
public java.lang.StringBuilder(CharSequence seq) 构造⼀个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 StringBuffer(int capacity)
构造⼀个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
构造⼀个字符串缓冲区,并将其内容初始化为指定的字符串内容。
2.StringBuffer的常见构造⽅法
StringBuffer append(String str)
将指定的字符串追加到此字符序列。
StringBuffer append(StringBuffer sb)
将指定的 StringBuffer 追加到此序列中。
StringBuffer delete(int start, int end)
移除此序列的⼦字符串中的字符。
StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。
StringBuffer insert(int offset, String str)
将字符串插⼊此字符序列中。
int length()
返回长度(字符数)。
StringBuffer reverse()
将此字符序列⽤其反转形式取代。
void setLength(int newLength)
设置字符序列的长度。
String toString()
返回此序列中数据的字符串表⽰形式。
三. 字符串的编码
-1.当前流⾏的字符编码有很多,如:US-ASCII、ISO-8859-1、UTF-8、GBK、GBK2312等,其中GBK、GB2312是专门处理中⽂编码的
-2.String的getBytes⽅法⽤于按指定编码获取字符串的字节数组。
-3.String的“String(bytes[] bs,String charset)”构造⽅法⽤于把字节数组按指定的格式组合成⼀个字符串对象。
更改字符串编码的步骤
String的getBytes⽅法对字符串进⾏解码,得到字符串的字节数组
c++string类型
根据字节数组和新的字符编码构造⼀个新的String对象,得到的就是按照新的字符编码⽣成的字符串。
四、正则表达式
API⽂档中常⽤符号
字符类
[abc]表⽰:a、b 或 c(简单类)
[^abc]表⽰:任何字符,除了 a、b 或 c(否定)
[1-5]表⽰:1,2,3,4,5
[a-f]表⽰:a-f之间
[0-9a-fA-f]表⽰:⼀个16进制字符
[a-zA-Z]表⽰:a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]表⽰:a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]表⽰:d、e 或 f(交集)
[a-z&&[^bc]]表⽰:a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]表⽰:a 到 z,⽽⾮ m 到 p:[a-lq-z](减去)
预定义字符类
.表⽰:任何字符(与⾏结束符可能匹配也可能不匹配)
\d表⽰:数字:[0-9]
.表⽰:任意字符
\D表⽰:⾮数字: [^0-9]
\s表⽰:空⽩字符:[ \t\n\b\f\r\p](\f -> 匹配⼀个换页)(\n -> 匹配⼀个换⾏符)(\r -> 匹配⼀个回车符))(\t -> 匹配⼀个制表符)(\v -> 匹配⼀个垂直制表符)
\S表⽰:⾮空⽩字符:[^\s]
\w表⽰:单词字符:[a-zA-Z_0-9]
\W表⽰:⾮单词字符:[^\w]
{m.n}数词
{1}表⽰:1个
{1,8}表⽰:⾄少出现1次,最多8次
{1,}表⽰1个或者1个以上
表⽰:{0,1}
+表⽰:{1,}
*表⽰:{0,}
开头,结尾
^表⽰:开头
$表⽰:结尾
边界匹配器
^表⽰:⾏的开头
$表⽰:⾏的结尾
\b表⽰:单词边界
\B表⽰:⾮单词边界
\A表⽰:输⼊的开头
\G表⽰:上⼀个匹配的结尾
\Z表⽰:输⼊的结尾,仅⽤于最后的结束符(如果有的话)
\z表⽰:输⼊的结尾
Greedy 数量词
X?表⽰:X,⼀次或⼀次也没有
X*表⽰:X,零次或多次
X+表⽰:X,⼀次或多次
X{n}表⽰:X,恰好 n 次
X{n,}表⽰:X,⾄少 n 次
X{n,m}表⽰:X,⾄少 n 次,但是不超过 m 次
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论