本次主要是对上次字符串解析的补充,上次是string类型的基本的操作:
在这里再说下String类的一些基本的使用吧:
String
类代表字符串。 Java程序中的所有字符串文字(例如"abc"
)都被实现为此类的实例。
字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。 例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'}; String str = new String(data);
以下是一些如何使用字符串的示例:
System.out.println("abc"); String cde = "cde"; System.out.println("abc" + cde); String c = "abc".substring(2,3); String d = cde.substring(1, 2);
String
类包括用于检查序列的各个字符的方法,用于比较字符串,搜索字符串,提取子字符串以及创建将所有字符翻译为大写或小写的字符串的副本。 案例映射基于Character
类指定的Unicode标准版本。
Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。 字符串连接是通过StringBuilder
(或StringBuffer
)类及其append
方法实现的。 字符串转换是通过方法来实现toString
,由下式定义Object
和继承由在Java中的所有类。 有关字符串连接和转换的其他信息,请参阅Gosling,Joy和Steele, Java语言规范 。
除非另有说明,否则传递null参数到此类中的构造函数或方法将导致抛出NullPointerException
。
A String
表示UTF-16格式的字符串,其中补充字符由代理对表示 (有关详细信息,请参阅Character课程中的Character
部分)。 索引值是指char
代码单元,所以补充字符在String中使用两个String
。
String
类提供处理Unicode代码点(即字符)的方法,以及用于处理Unicode代码单元(即char
值)的方法。
本文主要是字符串生成器类使用,StringBuilder类的使用:
StringBuilder是一个可变的字符序列。 此类提供与StringBuffer
的API,但不保证同步。 此类设计用作简易替换为StringBuffer
在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer
,因为它在大多数实现中将更快。
StringBuilder的主要StringBuilder
是append
和insert
方法,它们是重载的,以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入字符串构建器。 append
方法始终在构建器的末尾添加这些字符; insert
方法将insert
添加到指定点。
Constructor and Description |
---|
StringBuilder() 构造一个没有字符的字符串构建器,初始容量为16个字符。 |
StringBuilder(CharSequence seq) 构造一个包含与指定的相同字符的字符串构建器 |
StringBuilder(int capacity) 构造一个没有字符的字符串构建器,由 |
StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。 |
- 1.StringBuilder append (String str)方法,将参数str指定的字符串追加到字符串生成器中 语法如下:builder.append(String str);builder:声明的字符串生成器;str:追加到字符串生成器的字符串。返回类型为String型。
- 2.StringBuilder append (StringBuffer sb)方法,将参数sb指定的字符串缓存StringBuffer的值追加到字符串生成器中,语法如下:build.append(StringBuffer sb); builder:声明的字符串生成器;sb:缓存中的值,追加到字符串生成器的字符串。返回类型为String型。
-
append
追加public StringBuilder append(Object obj)
Object
参数的字符串表示。总的效果是完全一样如果参数是由该方法转换成一个字符串
String.valueOf(Object)
,而字符串的字符然后appended
到此字符序列。参数
obj
- 一个Object
。结果
对这个对象的引用。
-
append
将指定的字符串附加到此字符序列。public StringBuilder append(String str)
附加
String
参数的字符,以便String
参数的长度增加此序列的长度。 如果str
是null
,则附加四个字符"null"
。令n是在执行
append
方法之前的这个字符序列的长度。 那么如果k小于n ,则新字符序列中索引k处的字符等于旧字符序列中索引k处的字符; 否则,它等于参数str
中的索引kn处的str
。参数
str
- 一个字符串。结果
对这个对象的引用。
-
append
将指定public StringBuilder append(StringBuffer sb)
StringBuffer
这个序列。StringBuffer
参数的StringBuffer
按顺序附加到此序列中,将该序列的长度增加到参数的长度。 如果sb
是null
,那么四个字符"null"
附加到该序列。在执行
append
方法之前,让n为该字符序列的长度。 那么如果k小于n ,则新字符序列中索引k处的字符等于旧字符序列中索引k处的字符; 否则,它等于参数sb
中的索引kn处的sb
。参数
sb
- 附加的StringBuffer
。结果
对这个对象的引用。
-
append
public StringBuilder append(CharSequence s)
说明从界面:
将指定的字符序列追加到此Appendable 。Appendable
复制根据哪个类实现字符序列csq ,整个序列可能不被附加。 例如,如果csq是
CharBuffer
,则附加的子序列由缓冲区的位置和限制来定义。Specified by:
append
在界面Appendable
参数
s
- 要追加的字符序列。 如果csq是null ,那么四个字符"null"附加到该附录。结果
提到这个 Appendable
-
append
将指定的子序列public StringBuilder append(CharSequence s, int start, int end)
CharSequence
这个序列。从索引
start
开始的参数s
按顺序附加到该序列的内容,直到(独占)索引end
。 此序列的长度增加的值end - start
。令n是在执行
append
方法之前这个字符序列的长度。 那么如果k小于n ,则该字符序列中的索引k处的字符变得等于该序列中索引k处的字符; 否则,它等于参数s中索引k + start-n处的s
。如果
s
是null
,那么这个方法会附加字符,就像s参数是一个包含四个字符"null"
的序列"null"
。Specified by:
append
在界面Appendable
参数
s
- 要追加的顺序。start
- 要追加的子序列的起始索引。end
- 要附加的子序列的结束索引。结果
对这个对象的引用。
异常
IndexOutOfBoundsException
- 如果start
为负数,或start
大于end
或end
大于s.length()
-
append
将public StringBuilder append(char[] str)
char
数组参数的字符串表示附加到此序列。数组参数的字符按顺序附加到此序列的内容。 该序列的长度增加参数的长度。
总的效果是完全一样如果参数是由该方法转换成一个字符串
String.valueOf(char[])
,而字符串的字符然后appended
到此字符序列。参数
str
- 要附加的字符。结果
对这个对象的引用。
-
append
将public StringBuilder append(char[] str, int offset, int len)
char
数组参数的子阵列的字符串表示附加到此序列。从索引
offset
开始的char
数组str
按顺序附加到该序列的内容。 此序列的长度由的值增加len
。总的效果是完全一样的参数是由该方法转换成一个字符串
String.valueOf(char[],int,int)
,而字符串的字符然后appended
到此字符序列。参数
str
- 要附加的字符。offset
-第一的指数char
追加。len
- 要追加的char
的数量。结果
对这个对象的引用。
异常
IndexOutOfBoundsException
- 如果offset < 0
或len < 0
或offset+len > str.length
- 3.StringBuilder intsert(int offset,String str) 方法,将参数指定的字符串str添加到offser指定的位置,语法如下:builder.insert(int offset,String str) builder:声明的字符串生成器,offset:指定字符串添加的下标索引位置,str:添加的字符串,返回类型为String型。
- 4. StringBuilder delete(int start,String end);移除字符串生成器的字符串,重start开始到指定的end处结束。语法如下:builder.deleter(int start,String end); builder:声明的字符串生成器;start:删除字符串的起始索引位置;end: 删除字符串的结束索引位置返回类型为String型。
- 5.String toString()方法;将字符串生成器转换为字符串,转换后字符串生成器的值不变。语法如下:
- str.toString();str:字符串生成器的值,转换字符串,返回字符串类型;
-
capacity
public int capacity()
返回当前容量。 容量是新插入字符可用的存储量,超过此值将进行分配。
结果
当前的容量
-
ensureCapacity
确保容量至少等于规定的最小值。 如果当前容量小于参数,则会分配一个新的内部数组,容量更大。 新产能较大:如果public void ensureCapacity(int minimumCapacity)
minimumCapacity
参数minimumCapacity
正态,则此方法不执行任何操作,只需返回。 请注意,此对象的后续操作可以将实际容量降低到低于此处所请求的容量。参数
minimumCapacity
- 最低所需容量。minimumCapacity
论证。- 两倍的旧容量,加上
2
。
-
trimToSize
public void trimToSize()
尝试减少用于字符序列的存储。 如果缓冲区大于保持其当前字符序列所需的缓冲区,则可以将其调整大小以变得更加空间有效。 调用此方法可能但不是要求影响后续调用
capacity()
方法返回的值。 -
setLength
设置字符序列的长度。 该序列被更改为一个新的字符序列,其长度由参数指定。 对于小于每非负索引kpublic void setLength(int newLength)
newLength
,在新的字符序列的索引k处的字符是相同的在旧序列索引k如果k小于原字符序列的长度的字符; 否则为空字符'\u0000'
。 换句话说,如果newLength
参数小于当前长度,则长度将更改为指定的长度。如果
newLength
参数大于或等于当前长度,则会附加足够的空字符('\u0000'
),以使长度成为newLength
参数。newLength
参数必须大于或等于0
。参数
newLength
- 新的长度异常
IndexOutOfBoundsException
- 如果newLength
参数为负数。 -
charAt
返回public char charAt(int index)
char
在指定索引在这个序列值。 第一个char
值为索引0
,下一个索引为1
,依此类推,与数组索引一样。index参数必须大于或等于
0
,小于此序列的长度。如果
char
由索引指定的值是surrogate ,则返回所述替代值。Specified by:
参数
index
- 所需指数char
值。结果
char
指定指数值。异常
IndexOutOfBoundsException
- 如果index
为负数或大于或等于length()
。
上面主要是一些常用的方法,但是StringBuilder不适合多线程的使用如果使用应该使用使用StringBuffer:
以下是StringBuffer的一些简介:
线程安全,可变的字符序列。 字符串缓冲区就像一个String
,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步,以便任何特定实例上的所有操作都按照与所涉及的各个线程所执行的方法调用顺序一致的顺序发生。
StringBuffer的主要StringBuffer
是append
和insert
方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。append
方法总是在缓冲区的末尾添加这些字符; insert
方法将insert
添加到指定点。
例如,如果z
是指当前内容为"start"
的字符串缓冲区对象,那么方法调用z.append("le")
将使字符串缓冲区包含"startle"
,而z.insert(4, "le")
会将字符串缓冲区更改为包含"starlet"
。
一般情况下,如果某人是指的一个实例StringBuffer
,则sb.append(x)
具有相同的效果sb.insert(sb.length(), x)
。
每当涉及源序列(例如从源序列追加或插入)的操作发生时,该类仅在执行操作的字符串缓冲器上进行同步,而不在源上。 请注意,虽然StringBuffer
被设计为可以安全地从多个线程并发使用,但如果构造函数或append
或insert
操作被传递通过线程共享的源序列,则调用代码必须确保该操作具有一致且不变的视图在操作期间的源序列。 呼叫者通过使用不可变的源序列,或者不跨线程共享源序列,可以在呼叫期间持有锁来满足这一点。
每个字符串缓冲区都有一个容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,则会自动变大。
除非另有说明,否则将null
参数传递给null
中的构造函数或方法将导致抛出NullPointerException
。
从版本JDK 5开始,这个类别已经被一个等级类补充了,这个类被设计为使用一个线程StringBuilder
。 StringBuilder
应该使用StringBuilder
类,因为它支持所有相同的操作,但它更快,因为它不执行同步。
主要的常用的方法和StringBuilder的形式相差不大可以自行查阅API进行尝试coding一下。
package com.mingribook;
import java.util.StringTokenizer;//包声明
public class TestString1 {
public static void main(String[] args) {
String s=" we are students";
// 获取指定字符索引的位置用:对象名.indexOf("substr");x为要索引的字符(对象)索因对象字符下标从0开始;
System.out.println("字符中的e在哪个位置:"+s.indexOf("e"));
// 对象名.lastIndexOf("substr");substr为要搜索的对象,要索引出此对象的最后一次出现的位置
System.out.println("字符串中e出现的最后一次的位置:"+s.lastIndexOf("e"));
// 获取指定索引位置的字符:对象名.charAt(int index)index为整形值用于返回字符的下标;
System.out.println("字符串中第7个字符是:"+s.charAt(7));
// 去除字符串中的所有空格1;对象名.StringTokenizer(String str,String delim)delim为从字符串str中
// 去除的字符串.还可以用 2 :对象名.replaceAll(String regex, String replacement)
// regex为想要被替换的字符串,replacement为新字符串用来替换各个regex;
StringTokenizer st=new StringTokenizer(s," ");//使用空格来分分割字符串
StringBuffer sb=new StringBuffer();//定义字符串的缓存对象
while (st.hasMoreTokens()){
@SuppressWarnings("unused")
int i=0;
i++;
sb.append(st.nextToken());//向字符串生成器中增加内容;
}
System.out.println("去掉字符串中的所用空格之后的字符串是:");
System.out.println(sb.toString());
// 2所替换的字符要用""引起来
s=s.replaceAll(" " , "");
System.out.println("去除空格后的字符串:"+s);
// 字符串的替换:对象名.replace(String regex, String replacement)
// 和替换空格方式一样所替换的字符要用""引起来
String news=s.replace("students", "yang man");
System.out.println("字符串替换后的串是:"+news);
// 字符串中只替换第一个出现的字符:对象名.replaceFirst(String regex, String replacement)
// 此替换只替换第一个字符所替换的字符要用""引起来
s=s.replaceFirst("we", "you");
System.out.println("第一个字符替换后为:"+s);
}
}
public class BuilderString {
public static void main(String[] args) {
System.out.println("测试追加到生成器的方法:");
String s="good";//声明字符串
StringBuilder builder=new StringBuilder();//构造字符串的生成器
builder.append(s);//将s的值增加字符串生成器中
System.out.println(builder);
StringBuffer buffer=new StringBuffer("Sunday");//创建内容的字符串缓存;
StringBuilder str=new StringBuilder();//够造字符串生成器
str.append(buffer);//将缓存的内容追加代字符串生成器中;
System.out.println(str);
String s1="int";
String s2="ser";
StringBuilder st=new StringBuilder(s1);//将s1追加到字符串生成器
st.insert(2, s2);//向索引值为2处添加s2;
System.out.println(st);
StringBuilder p=new StringBuilder("studentman");
StringBuilder p1=p.delete(4, 6);//含前不含后,删除后原来的字符串会变被覆盖
System.out.println(p1+","+p);//删除后原来的字符串会变被覆盖
String p2=p.toString();
System.out.println(p2);
}
}