解析字符串(二)

本次主要是对上次字符串解析的补充,上次是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 。

String表示UTF-16格式的字符串,其中补充字符由代理对表示 (有关详细信息,请参阅Character课程中的Character部分)。 索引值是指char代码单元,所以补充字符在String中使用两个String

String类提供处理Unicode代码点(即字符)的方法,以及用于处理Unicode代码单元(即char值)的方法。

本文主要是字符串生成器类使用,StringBuilder类的使用:

StringBuilder是一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步。 此类设计用作简易替换为StringBuffer在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer ,因为它在大多数实现中将更快。

StringBuilder的主要StringBuilderappendinsert方法,它们是重载的,以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入字符串构建器。 append方法始终在构建器的末尾添加这些字符; insert方法将insert添加到指定点。

构造方法
Constructor and Description
StringBuilder()

构造一个没有字符的字符串构建器,初始容量为16个字符。

StringBuilder(CharSequence seq)

构造一个包含与指定的相同字符的字符串构建器 CharSequence 。

StringBuilder(int capacity)

构造一个没有字符的字符串构建器,由 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参数的长度增加此序列的长度。 如果strnull ,则附加四个字符"null" 。

    n是在执行append方法之前的这个字符序列的长度。 那么如果k小于n ,则新字符序列中索引k处的字符等于旧字符序列中索引k处的字符; 否则,它等于参数str中的索引kn处的str 。

    参数

    str - 一个字符串。

    结果

    对这个对象的引用。

  • append

    public StringBuilder append(StringBuffer sb)
    将指定StringBuffer这个序列。

    StringBuffer参数的StringBuffer按顺序附加到此序列中,将该序列的长度增加到参数的长度。 如果sbnull ,那么四个字符"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 。

    如果snull ,那么这个方法会附加字符,就像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

    public void setLength(int newLength)
    设置字符序列的长度。 该序列被更改为一个新的字符序列,其长度由参数指定。 对于小于每非负索引k 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:

    charAt在界面 CharSequence

    参数

    index - 所需指数 char值。

    结果

    char指定指数值。

    异常

    IndexOutOfBoundsException - 如果 index为负数或大于或等于 length() 。

上面主要是一些常用的方法,但是StringBuilder不适合多线程的使用如果使用应该使用使用StringBuffer:

以下是StringBuffer的一些简介:

线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步,以便任何特定实例上的所有操作都按照与所涉及的各个线程所执行的方法调用顺序一致的顺序发生。

StringBuffer的主要StringBufferappendinsert方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。append方法总是在缓冲区的末尾添加这些字符; insert方法将insert添加到指定点。

例如,如果z是指当前内容为"start"的字符串缓冲区对象,那么方法调用z.append("le")将使字符串缓冲区包含"startle" ,而z.insert(4, "le")会将字符串缓冲区更改为包含"starlet" 。

一般情况下,如果某人是指的一个实例StringBuffer ,则sb.append(x)具有相同的效果sb.insert(sb.length(), x) 。

每当涉及源序列(例如从源序列追加或插入)的操作发生时,该类仅在执行操作的字符串缓冲器上进行同步,而不在源上。 请注意,虽然StringBuffer被设计为可以安全地从多个线程并发使用,但如果构造函数或appendinsert操作被传递通过线程共享的源序列,则调用代码必须确保该操作具有一致且不变的视图在操作期间的源序列。 呼叫者通过使用不可变的源序列,或者不跨线程共享源序列,可以在呼叫期间持有锁来满足这一点。

每个字符串缓冲区都有一个容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,则会自动变大。

除非另有说明,否则将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);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值