Java的第五次总结

目录

5.1 String类

5.1.1声明字符串

5.1.2创建字符串

1. String()

3. String(char[ ]value)

5.2连接字符串 

1.使用连接运算符“+”

2.使用 concat() 方法

3.连接其他类型数据 

5.3提取字符串信息 

5.3.1获取字符串长度

5.4字符串的操作截取字符串

substring(前序号,后序号) 部分替换             String restr=str.replace

全部替换        正则表达式(数字)      String restrAll=str.replaceAll

5.4.3字符串分割 字符串.split(子串<可传正则表达式>,次数);

5.4.4转换成小写               toLowerCase

转换成大写               toUpperCase 

*比较字符串是否相等

字符串转换

 5.5可变字符串 

StringBuffer和Stringbuilder 的使用方法:


 

5.1 String类

5.1.1声明字符串

字符串是 Java 中特殊的类,使用方法像一般的基本数据类型,被广泛应用在 Java 编程中。Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个 String 类来创建和操作字符串。
 
在 Java 中定义一个字符串最简单的方法是用双引号把它包围起来。这种用双引号括起来的一串字符实际上都是 String 对象,如字符串“Hello”在编译后即成为 String 对象。因此也可以通过创建 String 类的实例来定义字符串。
 
不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。

5.1.2创建字符串

直接定义字符串是指使用双引号表示字符串中的内容,例如“Hello Java”、“Java 编程”等。具体方法是用字符串常量直接初始化一个 String 对象。

1. String()

初始化一个新创建的 String 对象,表示一个空字符序列。

2. String(String original) 

初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。例如:
 
String str1 = new String("Hello Java");
 
String str2 = new String(str1);
 
这里 str1 和 str2 的值是相等的。

3. String(char[ ]value)

分配一个新的字符串,将参数中的字符数组元素全部变为字符串。该字符数组的内容已被复制,后续对字符数组的修改不会影响新创建的字符串。例如:
 
char a[] = {'H','e','l','l','0'};String sChar = new String(a);a[1] = 's';

4. String(char[] value,int offset,int count) 

分配一个新的 String,它包含来自该字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被赋值,后续对字符数组的修改不会影响新创建的字符串。例如:
 
char a[]={'H','e','l','l','o'};String sChar=new String(a,1,4);a[1]='s';

 

5.2连接字符串 

1.使用连接运算符“+”


与绝大多数的程序设计语言一样,Java 语言允许使用“+”号连接(拼接)两个字符串。“+”运算符是最简单、最快捷,也是使用最多的字符串连接方式。在使用“+”运算符连接字符串和 int 型(或 double 型)数据时,“+”将 int(或 double)型数据自动转换成 String 类型。
 

 

int[] no = new int[] { 501, 101, 204, 102, 334 }; // 定义学号数组
String[] names = new String[] { "张城", "刘丽丽", "李国旺", "孟红霞", "贺宁" }; // 定义姓名数组
String[] classes = new String[] { "数学", "语文", "数学", "英语", "英语" }; // 定义课程数组
System.out.println("本次考试学生信息如下:");
// 循环遍历数组,连接字符串
for (int i = 0; i < no.length; i++) {
System.out.println("学号:" + no[i] + "|姓名:" + names[i] + "|课程:" + classes[i] + "|班级:" + "初二(三)班");
}
}
本次考试学生信息如下:
学号:501|姓名:张城|课程:数学|班级:初二(三)班
学号:101|姓名:刘丽丽|课程:语文丨班级:初二(三)班
学号:204|姓名:李国旺|课程:数学|班级:初二(三)班
学号:102|姓名:孟红霞|课程:英语|班级:初二(三)班
学号:334|姓名:贺宁|课程:英语|班级;初二(三)班

2.使用 concat() 方法

在 Java 中,String 类的 concat() 方法实现了将一个字符串连接到另一个字符串的后面。
 
字符串 1.concat(字符串 2);

public static void main(String[] args) {
String info = "三国演义、";
info = info.concat("西游记、");
info = info.concat("水浒传、");
info = info.concat("红楼梦");
System.out.println(info);
String cn = "中国";
System.out.println(cn.concat("北京").concat("海淀区").concat("人民公园"));
}
执行该段代码,

 三国演义、西游记、水浒传、红楼梦
中国北京海淀区人民公园

3.连接其他类型数据 

前面介绍的例子都是字符串与字符串进行连接,其实字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,此时会将这些数据直接转换成字符串。

public static void main(String[] args) {
String book = "三国演义"; // 字符串
int price = 59; // 整型变量
float readtime = 2.5f; // 浮点型变量
System.out.println("我买了一本图书,名字是:" + book + "\n价格是:" + price + "\n我每天阅读" + readtime + "小时");
}

 

上述代码实现的是将字符串变量 book 与整型变量 price 和浮点型变量 readtime 相连后将结果输出。在这里定义的 price 和 readtime 都不是字符串,当它们与字符串相连时会自动调用自身的 toString() 方法将其转换成字符串形式,然后再参与连接运算。因此,程序运行后的结果如下所示:
 
我买了一本图书,名字是:三国演义
价格是:59
我每天阅读2.5小时
System.out.println("我买了一本图书,名字是:"+book+"\n 价格是:"+price+"\n我每天阅读"+(price+readtime)+"小时");
 
因为运算符具有优先级,而圆括号的优先级最高,所以先计算 price 与 readtime 的和,再将结果转换成字符串进行连接。此时的运行结果如下所示:
 
我买了一本图书,名字是:三国演义
价格是:59
我每天阅读61.5小时

注意:只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,所以应该谨慎地将其他数据类型与字符串相连,以免出现意想不到的结果。

5.3提取字符串信息 

5.3.1获取字符串长度

​
在 Java 中,要获取字符串的长度,可以使用 String 类的 length() 方法,其语法形式如下:
 
字符串名.length();
​

在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为密码太短容易被破解,太长的话又不容易记住。这就需要首先获取用户输入的密码字符串,然后调用 length() 方法获取长度,再做进一步的长度判断,最终实现代码如下所示:

public static void main(String[] args) {
String sys = "学生信息管理";// 字义一个字符串表示系统名称
System.out.println("欢迎进入《" + sys + "》系统");// 输出系统名称
System.out.println("请设置一个管理员密码:");
Scanner input = new Scanner(System.in);
String pass = input.next();// 获取用户输入的密码
int length = pass.length();// 获取密码的长度
if (length > 6 && length < 12) {
System.out.println("密码长度符合规定。");
System.out.println("已生效,请牢记密码:" + pass);
} else if (length >= 12) {
System.out.println("密码过长。");
} else {
System.out.println("密码过短。");
}
}

 

欢迎进入《学生信息管理》系统
请设置一个管理员密码:
123456
密码过短。
欢迎进入《学生信息管理》系统
请设置一个管理员密码:
abc12345678
密码长度符合规定。
已生效,请牢记密码:abc12345678

5.4字符串的操作
截取字符串

substring(前序号,后序号)
 部分替换             String restr=str.replace

全部替换        正则表达式(数字)      String restrAll=str.replaceAll

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str ="0123456789abc\\d";// 创建字符串,前十位是数字
        String restr=str.replace("\\d","?");// 使用replace()将符合“\\d”表达式的字符串替换“?”
        String restrAll=str.replaceAll("\\d","?");// 使用 replaceAll()将符合“\\d”//输出结果 表达式的字符串替换“?” 
        System.out .println("字符串str:"+ str);//输出字符串
        System.out .println("使用replace()替换的结果:"+restr);//输出使用replace()替换的结果
        System.out.println("使用replaceA1l()替换的结果;"+ restrAll);//输出替换后的结果
    }
 
}

 

 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str ="8I want to marry you, so I need you!";// 创建字符串
        String noNumber =str.replaceFirst("\\d","");//将开头的数字替换成两个双引号“”
        String youToHer=noNumber.replaceFirst("you","her");// 将第一次出现的“you替换成“her”
        System.out.println("替换之后的结果是:"+youToHer);//输出结果
    }
 
}

5.4.3字符串分割 
字符串.split(子串<可传正则表达式>,次数);

  public static void main(String[] args) {
        String str="a1b2,c,d e f |gh";//创建字符串,包含多种类型字符 
        String[] al =str.split(",");//使用“,”分割
        String[] a2 =str.split("");// 使用空格分割
        String[] a3 =str.split("\\|");//使用“|”分割
        String[] a4 =str.split("\\d");//使用正则表达式分割,本行用数字分割
        //同时用”、空格、“”、数字分割,用符号“|”连接所有分隔符 
        String[] a5 =str.split(",| |\\||\\d");
        System.out.println("str的原值:["+str+"]");//显示str的原值
        //使用for-each 循环展示“,”分割的结果 
        System.out.print("使用\"\"分割:");
        for (String b:al){
        System.out.print("["+b+"]");
        }
        System.out.println(); //换行 
        //使用for-each循环展示空格分割的结果 
        System.out.print("使用空格分割:"); 
        for (String b:a2) {
        System.out.print("["+b+"]");
        }
        System.out.println();
        //使用for-each循环展示“|”分割的结果
        System.out.print("使用\"|\"分割:"); 
        for(String b:a3){
            System.out.print("[" +b+"]");
            }
            System.out.println();
            //使用for-each循环展示数字分割的结果
            System.out.print("使用数字分割:"); 
            for(String b:a4) {
            System.out.print("["+b+"]");
            }
            System.out.println();
            //使用for-each环展示所有分隔符同时分割的结果
            System.out.print("同时使用所有分隔符:"); 
            for(String b:a5) {
            System.out.print("[" +b +"]");
            }
            System.out.println();
            }
    }
 
      // TODO Auto-generated method stub
        String str = "192.168.0.1";//创建字符串
        String[] firstArray=str.split("\\.");//按照“”进行分割
        String[]secondArray=str.split("\\.",2);//按照“”进行两次分制
        System.out.println("str的原值为:["+str+"]");//输出s原值
        //输出全部分结果
        System.out.print("全部分割的结果:");
        for (String a :firstArray) {
        System.out.print("[" +a+"]");
        }
        System.out.println();//换行
        //输出分两次结果
        System.out.print("分割两次的结果:"); 
        for (String a :secondArray){
        System.out.print("["+a+"]");
        }
        System.out.println();
    }
    }

5.4.4转换成小写               toLowerCase

转换成大写               toUpperCase 

*比较字符串是否相等

 a==b           位置

a.equals      值 

a.equalsIgnoreCase(b)

 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str="a b cd efg";//利用正则表达式,将字符串中所有的空白内容都换成"";
                String shortstr= str.replaceAll("\\s", "") ;// 创建字符串堆 
                System.out.println("str的原值是:[" + str + "]");//输出结果
                System.out.println("删除空内容之后的值是:["+ shortstr + "]");//输出结果
    }
 
}

 
 

 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strl="abc";//创建字符串对象,内容全部小写 
        String str2="ABC";//创建字符串对象,内容全部大写
        System.out.println("区分大小写的结果:"+strl.equals(str2));//比较两个字符串的内容是否相等
        //比较两个字符串的内容否相等,不区分大小写
        System.out.println("不区分大小写的结果:"+strl.equalsIgnoreCase(str2));
    }
 
}


字符串转换

(1)日期格式化
 
 
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strl =String.format("%c",'X'); // 输出字符
        System.out.println("字母x大写:"+strl);
        String str2 = String.format("%d",1251 +3950);// 输出数字 
        System.out.println("1251+3950的结果是:"+ str2);
        String str3=String.format("%.2f",Math. PI);//输出小数点后两位 
        System.out.println("n取两位小数点:"+ str3);
        String str4=String.format("%b",2<3);//输出布尔值 
        System.out.println("2<3的结果是:"+ str4);
        String str5=String.format("%h",3510);// 输出哈希散列码。等同Integer.toHexString(3510);
        System.out.println("3510的hashCode值:"+ str5); 
        String str6=String.format("%o",33);//输出8进制 
        System.out.println("33的8进制结果是:"+str6);
        String str7 = String.format("%x",33);// 输出16进制 
        System.out.println("33的16进制结果是:"+str7);
        String str8 =String.format("%e",120000.1); // 输出科学计数法 
        System.out.println("120000.1用科学计数法表示:"+str8);
        String str9=String.format("%a",40.0);// 输出带有效位数和指数的 16 进制浮点值 
        System.out.println("40.0的16进制浮点值:"+ str9);//输出百分号和数字
        System.out.println(String.format("天才是由%d%%的灵感,%d%%的汗水。",1,99));//输出
    }
 
}
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str1 = String.format("%5d", 123);//让字符串输出最大的长度为5,不足长度的在前端补空格
        System.out.println("输出长度为5的字符串|"+str1+"|");
        String str2=String.format("%-5d",123 );///现字得事方对齐 
        System.out.println("左对齐|"+ str2+"|");
        String str3=String.format("%#o",33);//在在进制前加个。
        System.out.println("33的8进制结果是:"+str3);
        String str4 = String.format("%#x",33);//在16进制前加个0x 
        System.out.println("33的16进制结果是:"+str4);
        String str5 = String.format("%+d",1);//显不数字正负号 
        System.out.println("我是正数:"+ str5);
        String str6 = String.format("%+d",-1); // 显示数字正负号 
        System.out.println("我是负数:"+str6);
        String str7 = String.format("%d",1 ); // 在正数前补一个空格
        System.out.println("我是正数,前面有空格"+str7);
        String str8 = String.format("% d",-1);//在负数前补一个负号 
        System.out.println("我是负数,前面有负号"+str8);
        String str9 = String.format("%05d",12);//让字符串输出的最大长度为5,不足度在前端补0
        System.out.println("前面不够的数用0填充:"+str9);
        String str10 = String.format("%,d",123456789);//用号分隔数字
        System.out.println("用运号分隔:"+str10);
        String str11 = String.format("%(d",13); // 正数无影响 
        System.out.println("我是正数,我没有括号:"+str11);
        String str12 = String.format("%(d",-13);//让负数用括号括起来 
        System.out.println("我是负数,我有括号的:"+ str12);
    }
 
}

 5.5可变字符串 

类名                                                     对象类型       执行效率                             线程安全性

String      指向另外的空间                        常量             慢                                       不安全

StringBuffer    指向在原来的基础上添加  变量             中              有锁                    安全

Stringbuilder    在原来的基础上添加        变量            快               无 锁                  不安全


StringBuffer和Stringbuilder 的使用方法:
追加 字符串名.append (需要追加的值);

修改某个元素的值  字符串名.setCharAT(序号,值);

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StringBuffer sbf=new StringBuffer("门前大桥下,");//创建StringBuffer 对象 
        sbf.append("游过一群鸭,");// 追加字符串常量
        StringBuffer tmp=new StringBuffer("快来快来数一数,");// 追加StringBuffer 对象 
        sbf.append(tmp); int x=24678;
        sbf.append(x);//追加整型变量
        System.out.println(sbf.toString());// 输出}
    }
 
}


 

StringBuffer和Stringbuilder 的使用方法:

插入   字符串名.insert(序号,值);

反转   字符串名.reverse();

删除   字符串名.delate(前序号,后序号);

 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StringBuffer sbf = new StringBuffer("ABCDEFG");// 创建字符串序列
        int lenght = sbf.length();// 获取字符串序列的长度
        char chr = sbf.charAt(5); // 获取索引为5的字符
        int index = sbf.indexOf("DEF");// 获取DEF字符串所在的索引位置
        String substr = sbf.substring(0, 2);// 截取从索引0开始至索引2之间的字符串
        StringBuffer tmp = sbf.replace(2, 5, "1234");// 将从索引2开始至索引5之间的字符序列替换成"1234"
        System.out.println("sbf的原值为:" + sbf);//输出
        System.out.println("sbf的长度为:" + lenght);//输出
        System.out.println("索引为5的字符为:" + chr);//输出
        System.out.println("DEF字符串的索引位置为:" + index);//输出
        System.out.println("索引0开始至索引2之间的字符串:" + substr);//输出
        System.out.println("替换后的字符串为:" + tmp);//输出
    }
 
}
 
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = ""; // 创建空字符串
        // 定义对字符串执行操作的起始时间
        long starTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) { // 利用for循环执行10000次操作
            str = str + i; // 循环追加字符串
        }
        long endTime = System.currentTimeMillis(); // 定义对字符串操作后的时间
        long time = endTime - starTime; // 计算对字符串执行操作的时间
        System.out.println("String循环1万次消耗时间:" + time); // 将执行的时间输出
 
        StringBuilder builder = new StringBuilder(""); // 创建字符串生成器
        starTime = System.currentTimeMillis(); // 定义操作执行前的时间
        for (int j = 0; j < 10000; j++) { // 利用for循环进行操作
            builder.append(j); // 循环追加字符
        }
        endTime = System.currentTimeMillis(); // 定义操作后的时间
        time = endTime - starTime; // 追加操作执行的时间
        System.out.println("StringBuilder循环1万次消耗时间:" + time); // 将操作时间输出
 
        StringBuilder builder2 = new StringBuilder(""); // 创建字符串生成器
        starTime = System.currentTimeMillis(); // 定义操作执行前的时间
        for (int j = 0; j < 50000; j++) { // 利用for循环进行操作
            builder2.append(j); // 循环追加字符
        }
        endTime = System.currentTimeMillis(); // 定义操作后的时间
        time = endTime - starTime; // 追加操作执行的时间
        System.out.println("StringBuilder循环5万次消耗时间:" + time); // 将操作时间输出
    }
 
}

追加 字符串名.append(需要追加的值);

设定某一个元素值 字符串名.setCharAt(序号,值);

插入 字符串名.insert(序号,值);

反转 字符串.reverse();

删除 字符串名.delete(前序号,后序号).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值