JavaSE之三个特殊类(一、String类)

  1. String类的两种实例化方式

 (1)、直接赋值:

public class Test1{
    public static void main(String[] args) {
        String str = "hello"; // str是一个对象,“hello”应该保存在堆中
        System.out.println(str);
    }
}

在JVM底层实际上会自动维护一个对象池(字符串对象池),如果现在采用了直接赋值的模式进行String类的对象 实例化操作,那么该实例化对象(字符串内容)将自动保存到这个对象池之中。如果下次继续使用直接赋值的模式 声明String类对象,此时对象池之中如若有指定内容,将直接进行引用;如若没有,则开辟新的字符串对象而后将 其保存在对象池之中以供下次使用。

(2)传统方法:

public class Test1{
    public static void main(String[] args) {
        String str = new String("hello"); // 用new进行对象实例化
        System.out.println(str);
    }
}

      通过分析可知,如果使用String构造方法就会开辟两块堆内存空间,并且其中一块堆内存将成为垃圾空间。除了这 一缺点之外,也会对字符串共享产生问题。

1.1 字符串的相等比较(equals())

      (1)可以使用“==”来判断

// 基本数据类型比较
int x = 10 ;
int y = 10 ;
System.out.println(x==y); //true

// 在string对象上比较
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1==str); // false

       (2)用String类提供的equals方法。

String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1.equals(str));

释String类"=="与"equals"的区别:

1. ”==”:进行的数值比较,比较的是两个字符串对象的内存地址数值。

2. “equals()”:可以进行字符串内容的比较

释String类中两种对象实例化的区别:

1. 直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。

2. 构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern() 方法手工入池。

1.2 string类中字符与字符串的操作方法

字符串就是一个字符数组,所以在String类里面支持有字符数组转换为字符串以及字符串变为字符的操作方法。

语法:

在此之前先说明求字符串和数组的长度方法:例如:有一个字符串str ,数组str

a:字符串的长度用方法来描述(str.length())

b:数组的长度用属性来描述(str.length)

(1)将字符数组中的所有内容变为字符串()

public class Test1{
    public static void main(String[] args) {
        char[] chars = new char[] {'w','o','r','l','d'}; // 数组的静态初始化
        System.out.println(chars.length); // 打印数组长度
        System.out.println(new String(chars).length()); // 数组转化为字符串 并打印长度

        // 重载  从下标为 0  开始  打印 长度为  3   的字符
        System.out.println((new String(chars,0,3)));
    }
}

(2)将字符数组转化为字符串

public class Test1{
    public static void main(String[] args) {
        String str = "hello";
        // 求字符串的长度 用方法来描述
        System.out.println(str.length());
        // 求数组的长度  用属性来描述
        System.out.println(str.toCharArray().length); // 把字符串转变为字符数组
        // 取得字符  e
        System.out.println(str.charAt(1));
    }
}

还可以通过一道题来熟悉这两个方法。

例题:判断一个指定的字符串是否是有数字组成的

 public class Test1{
     public static void main(String[] args) {
        String str = "12a3456";
        System.out.println(isNumber(str) ? "字符串由数字构成!" : "字符串中有非数字成员!");  
     }
     public static boolean isNumber(String str){
         // 把字符串转为字符数组
         char[] data = str.toCharArray();
         for(int i = 0; i < data.length; i++){
             if(data[i]<'0' || data[i]>'9'){ // 不是数字
                 return false;
             } 
         }
        return true;
        } 
 }

1.3 String中字节与字符串的操作方法

字节常用于数据传输以及编码转换的处理之中,在String中提供有对字节的支持。

字节数组转化为字符数组、字符数组转化为字节数组可以通过一个实例来说明

例1:将一个字符串按指定格式(GBK格式)先编码,再解码,最后输出这个字符串

public class Test1{
    public static void main(String[] args) throws Exception {
        String str = "你好世界";
        // 将字符转化为指定的字节数组  String--->byte[]
        byte[] data = str.getBytes("GBK"); //  按照GBk格式,编码
        // 将字节数组转化为指定的字符    byte[]--->String
        String result = new String(data,"GBK"); // 按照GBK格式,解码
        System.out.println(result);
        // 因为编解码的格式不一样,所以最终输出的结果解释乱码
    }
}

主要过程:第一步:先让字符串转化为字节数组

                  第二步:对字节进行编码(GBK格式)

                  第三步:再把字节数组转化为字符串并输出。

例2:将小写的字符串转化为大写的字符串并输出。

public class Test1{
    public static void main(String[] args) {
        String str = "abcdef";
        byte[] data = str.getBytes();  // 将字符串转化为字节数组
       
        for(int i = 0; i < data.length; i++){  // 小写字母和大写字母相差32
                   data[i] -= 32;
            }
        String result = new String(data); // 字节数组转化为字符串
        System.out.println(result);
    }
}

1.4  String中的字符串比较方法

上面使用过String类提供的equals()方法,该方法本身是可以进行区分大小写的相等判断。除了这个方法之外,String 类还提供有如下的比较操作:

a:不区分大小写方法

String str1 = "hello" ;
String str2 = "Hello" ;
System.out.println(str1.equalsIgnoreCase(str2)); // true

b:区分大小写方法

String str1 = "hello" ;
String str2 = "Hello" ;
System.out.println(str1.equals(str2)); // false

在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内 容:

                                   1. 相等:返回0.

                                   2. 小于:返回内容小于0.

                                   3. 大于:返回内容大于0。

1.5  String中字符串查找

语法如上的表格中,下面请看代码:

public class Test1{
    public static void main(String[] args) {
       String str = "hello world";
       String str1 = "@@!!hello world$$";

       System.out.println(str.contains("world")); // 判断是否存在world(true
       System.out.println(str.contains("this"));  // 判断是否存在this (false
       System.out.println(str.indexOf("l")); // 从头开始查找第一个 l 的位置 (2
       System.out.println(str.indexOf("l",5)); // 从下标为5 的位置开始查找遇到的第一个 l (9 
       System.out.println(str.lastIndexOf("l")); // 从后往前开始查找遇到第一个 l  (9
       

       System.out.println(str1.startsWith("@@")); // 判断是不是以字符@@开头(true
       System.out.println(str1.startsWith("!!",2)); // 从下标为2的位置开始判断是不是以字符!!开头(true
       System.out.println(str1.endsWith("$$")); // 判断是不是以$$结尾(true

       
    }
}

1.6  String中字符替换方法

使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:

代码:

public class Test1{
    public static void main(String[] args) {
       String str = "hello world";

       System.out.println(str.replaceFirst("l", "A")); // 把第一个 l 换成 A 
       System.out.println(str.replaceAll("l", "A")); // 把所有的 l 替换为 A
      
    }
}

 

1.7  String字符串拆分方法

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。 可用方法如下:

注意:一般的拆分,直接使用语法正常操作就好,如果发现有些内容无法拆分开就需要使用"\"转义,转义之后再拆分。

public class Test1{
    public static void main(String[] args) {
       String str = "hello world hello sky";
       String[] data = str.split(" "); // 按照空格拆分
       for(String str1 : data){
           System.out.println(str1);
       }
       String[] data1 = str.split(" ",2); // 按照空格拆分,拆分的长度为2
       for(String str2 : data1){
           System.out.println(str2);
       }
      
    }
}

输出结果:

例题:有一个字符串str = xingming:zhangsan|nianling:18  ,把姓名和年龄拆分开。(模式:姓名:年龄|姓名:年龄|..)

代码:

public class Test1{
    public static void main(String[] args) {
       String str = "xingming:zhangsan|nianling:18";
       // 要拆分出姓名 和 年龄
       // 1、按照 | 拆分 (但是要转义)
       String[] temp = str.split("\\|");
       // 按照|拆分完  得到两个字符数组   再按照:拆分
       for(int i = 0; i < temp.length; i++){
           String[] result = temp[i].split(":"); // 按照 : 拆分
           System.out.println(result[1]); // 取得拆分后的第二个 字符串  就是想要的
       }
    }
}

运行结果:

 

1.8   String  中字符串的截取

从一个完整的字符串之中截取出部分内容。可用方法如下:

public class Test1{
    public static void main(String[] args) {
       String str = "hello world";
       System.out.println(str.substring(1)); // 从 下标1 开始 截取到最后
       System.out.println(str.substring(1,8)); // 从下标1截取到下标8
    }
}

 

字符串截取的应用:可以用来实现字符串的首字母大写

实现代码:

public class Test1{
    public static void main(String[] args) {
       String str = "hello world";
      
       // 先截取首字母 把首字母大写后  加上 首字母之后的
       System.out.println(str.substring(0,1).toUpperCase()+str.substring(1));
    }
}

 

 

1.9   字符串的其他操作方法

 

其他的语法和上面的大同小异,就不一一介绍了。主要说一下trim()方法和isEmpty()方法。

trim()方法: 主要是去除字符串开头和结尾的空格,字符串中间的不影响。

isEmpty()方法:字符串的判空操作。具体的以实例来看

代码实现:

public class Test1{
    public static void main(String[] args) {
        // 先判空  不为空去除左右的空格
       String str = "   hello  world   ";
       System.out.println("["+str+"]");
       if(!(str == null || str.isEmpty())){
           System.out.println("["+str.trim()+"]");
       }    
    }
}

 

运行结果:

从运行结果看,字符串左右两端的空格去除了,但是中间的还在,因此使用时候注意别人要求什么。

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值