学习java第十二天

学习java第十二天

类 StringBuffer(从JDK1.0开始)

1、线程安全的可变字符序列(可变的字符串)
2、一个类似于 String 的字符串缓冲区
主要是两个方法(append()追加、insert()添加)
String与 StringBuffer
1、都是对字符序列进行操作
2、String 的数据是不可变的、StringBuffer 的内容是可变的
3、StringBuffer 自带缓存区,读取数据块,效率更高
如果一个字符串反复修改其值,相比Stringl来说使用StringBuffer 效率更高,使用StringBuffer反复来创建变量。
StringBuffer的构造方法

无参的构造 public StringBuffer(): 默认会给16个字符大小的缓冲区
注:capacity()方法 是获取缓冲区容量的大小
有参构造
public StringBuffer(int capacity):构造一个不带字符,但具有指定初始容量的字符串缓冲区。
public StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度

StringBuffer方法

增改
public StringBuffer append(参数列表)
追加该方法的对象的值。 该方法采用:boolean,char,int,long,String等类型。
public StringBuffer insert(参数列表)
在指定位置添加给定的数据类型,boolean,char,int,long,String等类型。
需要第一参数传递追加的索引 。

删取
public StringBuffer deleteCharAt(int index)
移除此序列指定位置(索引)的 char。此序列将缩短一个 char字符。
public StringBuffer delete(int start, int end)
删除指定区间的字符。
public char charAt(int index)
返回此序列中指定索引处的 char 值。
public int indexOf(String str)
查找是否存在这个字符, 存在返回当前的索引,不存在返-1
length() 获取字符串的长度 *
replace(int start, int end, String str) 替换 根据区间来进行替换
reverse() 控制翻转 *
toString() 转换成String
*

StringBuffer String相互转换
String转换成一个StringBuffer :

  1. 通过构造方法 new StringBuffer(“String字符串”);
  2. 通过调用其append new StringBuffer().append(“String字符串”)’;

StringBuffer转换String:

  1. 通过toString() 方法
  2. 通过String构造方法 new String(StringBuffer类的字符)

StringBuilder : 1. 一个可变的字符序列 2.多个线程是不安全的

StringBuilder和StringBuilde的区别
StringBuffer 1.0 多线程安全 效率低 (开发里使用这个多一点)
StringBuilder 1.5 多线程不安全 效率高

包装类:使用包装类型后,可以使用包装类的方法,可以实现类型的相互转换
基本数据类型都是非常简单的数据类型,不是包装类型
基本数据类型的包装类:
int -> Integer char -> Character
其它基本数据类型的包装类型都是把首字母换成大写

Integer 类型
对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。
构造方法
public Integer(int value):Integer 对象,且为 int 值。

public Integer(String s):表示 String 参数所指示的 int 值。
否则出现异常 : java.lang.NumberFormatException

常量值:
public static final int MAX_VALUE 获取int类型最大的值
public static final int MIN_VALUE 获取int类型最小的值 所有的包装类型都会有 这三个常量
public static final int SIZE 获取 int 类型的位数

Integer类的常用方法
public byte byteValue() 返回值是一个 byte 1.相互转换的时候不要超过最大的范围

public static int parseInt(String s) 静态方法: 把String转换成int类型的方法(最常用)

public static String toBinaryString(int i) 把int 类型转换成 二进制

public static String toOctalString(int i) 把 int 类型转换成 八进制

public static String toHexString(int i) int 类转换为 16进制

public static Integer valueOf(int i) 把int 类型转换成包装类

String int Integer (数据类型的相互装换)
String转换成int 类型

  1. 通过构造 new Integer()
  2. 通过parseInt(String s)(常用)
  3. valueOf(String str)

int 类型转换 成String 类型

  1. new String(int i)
  2. 拼接 +""(常用)
  3. toString()方法
    int 类型转换成 Integer 类型
  4. 通过构造方法 new Integer()
  5. valueOf(int i)

Integer转换成 int 类型:

  1. intValue()
  2. 直接赋值(Integer i = 10)

jdk 1.5 之后会自动包装
自动包装: 把基本数据类型转换成包装类
自动拆箱 把包装类转换成 基本数据类型

手动装箱 :Integer integer = new Integer(10);
手动拆箱 : intValue();

正则表达式

  1. 就是一个字符串 (校验规则的字符串) 主要是做验证,把复杂的问题的简单化
  2. 坏处:记忆量,但不一定写的对

字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[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\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

正则的三个方法 :
第一个是比较 matches(str)
第二个是 split("")
第三个是: replaceAll(reg,"")

总结:这几天讲的这些类的方法挺多的,不好记,但也不用记,但是对于正则表达式的使用,我感觉真的是无从下手,比如说怎么截取指定字符到字符范围的内容都被难倒了。

作业*


import java.util.Arrays;

public class Until {


    //1. 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕
    public static String getJdk(String str) {
        return str.toUpperCase().substring(1, str.length());

    }

    //2.	写一个方法判断一个字符串是否对称
    public static boolean check(String str) {
        StringBuffer sb = new StringBuffer(str);
        return sb.reverse().toString().equals(str);
    }

    //3.	编写一个程序,将下面的一段文本中的各个单词的字母顺序翻转
    public static String turn(String str) {

        String[] s = str.split("\\b");
        String s1 = "";
        for (int i = 0; i < s.length; i++) {
            s1 += new StringBuffer(s[i]).reverse().toString();
        }
        return s1;
    }

    //4.	String s="name=zhangsan age=18 classNo=090728"
    //           将上面的字符串拆分,结果如下:zhangsan 18 090728;
    public static String cut(String str) {
        return str.replaceAll("([\\s][\\w]{1,999}[=])|([\\w]{1,999}[=])", " ");
    }


    //5.	使用两种方法把这个字符串中的单词首字母转为大写:
    public static String changeFirst(String str) {
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    //6.
    //统计该字符串中字母s出现的次数
    public static int operate(String str, String c) {
        String[] s = str.split(c);
        return s.length - 1;
    }

    //取出子字符串"test"
    public static String get(String str, String c) {
        if (str.contains(c)) {
            return str.substring(str.indexOf(c), str.indexOf(c) + c.length());
        }
        return null;
    }

    // 用多种方式将本字符串复制到一个字符数组Char[] str中.
    public static char[] way(String s) {
        char[] str = null;
        char[] ch1 = s.toCharArray();//第一种

        char[] ch2 = new char[s.length()];//第二种
        for (int i = 0; i < s.length(); i++) {
            ch2[i] = s.charAt(i);
        }
        

        str = ch1;
        return str;

    }

    //(4) 将字符串中每个单词的第一个字母变成大写, 输出到控制台。
    public static String everyFirst(String str) {
        String[] s1 = str.split(" ");
        String s2 = "";
        for (String s3 : s1) {
            s2 += s3.substring(0, 1).toUpperCase() + s3.substring(1) + " ";
        }
        return s2;

    }

    //(5) 用两种方式实现该字符串的倒叙输出。(用StringBuffer和for循环方式分别实现)
    public static String back(String str) {
        //第一种
        StringBuffer s1 = new StringBuffer(str);
        s1.reverse();
        //第二种
        String s2 = "";
        char[] ch = str.toCharArray();
        for (int i = ch.length - 1; i > 0; i--) {
            s2 += ch[i];
        }
        return s2;
    }

    //(6) 将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的额英文单词,并输出到控制台
    public static void print(String str) {
        String[] s = str.split(" ");
        for (String s1 : s) {
            System.out.println(s1);
        }
    }

//首尾去除*字符
    public static String delHeadEnd(String str) {

        if (!str.isEmpty()) {
            StringBuffer sb = new StringBuffer(str);
            if (str.startsWith("*") && sb.length() != 0) {
                sb.delete(0, 1);
            }
            if (str.endsWith("*") && sb.length() != 0) {
                sb.delete(sb.length() - 1, sb.length());
            }
            str = sb.toString();
        }
        return str;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值