17/7/29学习笔记02

1.String类的概述

01.字符串:多个字符组成的一串数据或者看成一个字符数组;
02.字符串字面值可以看成一个对象,字符串是个常量一旦被赋值,就不能改变;
03.常见的构造方法:
   public String():空构造
   public String(byte[] bytes):把字节数组转成字符串
   public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
   public String(char[] value):把字符数组转成字符串
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
    public String(String original):把字符串常量值转成字符串    04.字符串的方法
    public int length()返回字符串的长度;

2.String类的特点

  01.字符串的特点:一旦被赋值,值不能改变;
    String s = "hello";
    s += "world";
    System.out.println("s:" + s); // 输出helloworld
    解释:字符串直接赋值的方式是先去方法区字符串常量池里面找,如果找到直接返回,如果没有创建并返回;"hello"先是被创建在常量池里后返回地址值,让s指向地址,"world"后来也被创建并有一个地址值,s += "world"后新创建了一个"helloworld"并新给了一个地址,再将s指向新地址。 
    02.String字面值对象和构造方法创建的对象的区别;
    eg:String s = new String(“hello”)和String s = “hello”;的区别?
    答:前者会创建2个对象,后者创建1个对象。
    解释:通过构造方法创建的对象先会在堆内存中创建一个对象,之后会去方法区字符串常量池里找,找到返回,找不到创建并返回;而字面值对象直接去方法区字符串常量池里面找。所以创建的对象个数不同。suo

所以下面这个例子一个是false,一个是true
String s1 = new String(“hello”);
String s2 = “hello”;
System.out.println(s1 == s2);// (==)比较的是地址值–false
System.out.println(s1.equals(s2));//String重写的equals方法比较的是内容– true
3.String面试题

 01.{
    String s1 = "hello";
    String s2 = "world";
    String s3 = "helloworld";
    System.out.println(s3 == s1 + s2);// false
    System.out.println(s3.equals((s1 + s2)));// true

    System.out.println(s3 == "hello" + "world");// true
    System.out.println(s3.equals("hello" + "world"));// true
      }
      结论:字符串如果是变量相加,先开空间,在拼接。eg:(s3 == s1 + s2);
      字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。eg:(s3 == "hello" + "world");

4.String的判断功能

     01.String类的判断功能:
     常用方法:
      boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
      boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
      boolean contains(String str):判断大字符串中是否包含小字符串(意思是相连的字符串,如(hefei--ef--fei))
     boolean startsWith(String str):判断字符串是否以某个指定的字符串开头(个数不限)
      boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
      boolean isEmpty():判断字符串是否为空。
      注意:
      (String s = "";
       String  s1 = null;
       System.out.println("isEmpty:" + s.isEmpty());
       // NullPointerException
       // s1对象都不存在,所以不能调用方法,空指针异常
     System.out.println("isEmpty:" + s1.isEmpty());)

5.String类的获取功能

01.常见方法
     int length():获取字符串的长度;
     char charAt(int index):获取指定索引位置的字符;
     int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引;
     int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引;
     int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引;
     int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引;
     String substring(int start):从指定位置开始截取字符串,默认到末尾。包含start这个索引;
     String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。包括start索引但是不包end索引;

5.字符串的方法案例

 01.需求:遍历获取字符串中的每一个字符
   public class bianli {
    public static void main(String[] args) {
        String string="abcefghijk";
        for(int i=0;i<string.length();i++)
        {
            System.out.print(string.charAt(i)+"  ");
        }
    }

}
     02. 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
public class cout {
    public static void main(String[] args) {
        //定义一个字符串
        String s = "Hello1156World";

        //定义三个统计变量
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        //遍历字符串,得到每一个字符。
        for(int x=0; x<s.length(); x++){
            char ch = s.charAt(x);

            //判断该字符到底是属于那种类型的
            if(ch>='a' && ch<='z'){
                smallCount++;
            }else if(ch>='A' && ch<='Z'){
                bigCount++;
            }else if(ch>='0' && ch<='9'){
                numberCount++;
            }
        }

        //输出结果。
        System.out.println("大写字母"+bigCount+"个");
        System.out.println("小写字母"+smallCount+"个");
        System.out.println("数字"+numberCount+"个");
    }
}

6.字符串的转换功能

01.String的转换功能:
   byte[] getBytes():把字符串转换为字节数组。
   char[] toCharArray():把字符串转换为字符数组。
   static String valueOf(char[] chs):把字符数组转成字符串。
   static String valueOf(int i):把int类型的数据转成字符串。
    注意:String类的valueOf方法可以把任意类型的数据转成字符串。
   String toLowerCase():把字符串转成小写。
   String toUpperCase():把字符串转成大写。
   String concat(String str):把字符串拼接。
   eg:
public class StringDemo {
    public static void main(String[] args) {
        // 定义一个字符串对象
        String s = "JavaSE";

        // byte[] getBytes():把字符串转换为字节数组。
        byte[] bys = s.getBytes();
        for (int x = 0; x < bys.length; x++) {
            System.out.println(bys[x]);
        }
        System.out.println("----------------");

        // char[] toCharArray():把字符串转换为字符数组。
        char[] chs = s.toCharArray();
        for (int x = 0; x < chs.length; x++) {
            System.out.println(chs[x]);
        }
        System.out.println("----------------");

        // static String valueOf(char[] chs):把字符数组转成字符串。
        String ss = String.valueOf(chs);
        System.out.println(ss);
        System.out.println("----------------");

        // static String valueOf(int i):把int类型的数据转成字符串。
        int i = 100;
        String sss = String.valueOf(i);
        System.out.println(sss);
        System.out.println("----------------");

        // String toLowerCase():把字符串转成小写。
        System.out.println("toLowerCase:" + s.toLowerCase());
        System.out.println("s:" + s);
        // System.out.println("----------------");
        // String toUpperCase():把字符串转成大写。
        System.out.println("toUpperCase:" + s.toUpperCase());
        System.out.println("----------------");

        // String concat(String str):把字符串拼接。
        String s1 = "hello";
        String s2 = "world";
        String s3 = s1 + s2;
        String s4 = s1.concat(s2);
        System.out.println("s3:"+s3);
        System.out.println("s4:"+s4);
    }
}
02.需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
   分析:

    A:先获取第一个字符
    B:获取除了第一个字符以外的字符
    C:把A转成大写
    D:把B转成小写
    E:C拼接D
public class StringTest {
    public static void main(String[] args) {
        // 定义一个字符串
        String s = "helloWORLD";

        // 先获取第一个字符
        String s1 = s.substring(0, 1);
        // 获取除了第一个字符以外的字符
        String s2 = s.substring(1);
        // 把A转成大写
        String s3 = s1.toUpperCase();
        // 把B转成小写
        String s4 = s2.toLowerCase();
        // C拼接D
        String s5 = s3.concat(s4);
        System.out.println(s5);

        // 优化后的代码
        // 链式编程
        String result = s.substring(0, 1).toUpperCase()
                .concat(s.substring(1).toLowerCase());
        System.out.println(result);
    }
}

7.String类的其他功能

01String的其他功能
  替换功能:
  String replace(char old,char new)
  String replace(String old,String new)

  去除字符串两空格  
  String trim()

  按字典顺序比较两个字符串  
  int compareTo(String str)//注意:{
  String s1="hello";
  String s2="hel";
  System.out.println(s1.compareTo(s2))/结果为2
  因为当前面都相等时。返回的是字符串长度相减的结果;
  }
  int compareToIgnoreCase(String str)

  eg:
    public class StringDemo {
    public static void main(String[] args) {
        // 替换功能
        String s1 = "helloworld";
        String s2 = s1.replace('l', 'k');
        String s3 = s1.replace("owo", "ak47");
        System.out.println("s1:" + s1);
        System.out.println("s2:" + s2);
        System.out.println("s3:" + s3);
        System.out.println("---------------");

        // 去除字符串两空格
        String s4 = " hello world  ";
        String s5 = s4.trim();
        System.out.println("s4:" + s4 + "---");
        System.out.println("s5:" + s5 + "---");

        // 按字典顺序比较两个字符串
        String s6 = "hello";
        String s7 = "hello";
        String s8 = "abc";
        String s9 = "xyz";
        System.out.println(s6.compareTo(s7));// 0
        System.out.println(s6.compareTo(s8));// 7
        System.out.println(s6.compareTo(s9));// -16
    }
}

8.String类练习

01.需求:把数组中的数据按照指定个格式拼接成一个字符串
   分析:
   A:定义一个字符串对象,只不过内容为空
    B:先把字符串拼接一个"["
    C:遍历int数组,得到每一个元素
    D:先判断该元素是否为最后一个
        是:就直接拼接元素和"]"
        不是:就拼接元素和逗号以及空格
    E:输出拼接后的字符串
public class StringTest {
    public static void main(String[] args) {
        // 前提是数组已经存在
        int[] arr = { 1, 2, 3 };

        // 定义一个字符串对象,只不过内容为空
        String s = "";

        // 先把字符串拼接一个"["
        s += "[";

        // 遍历int数组,得到每一个元素
        for (int x = 0; x < arr.length; x++) {
            // 先判断该元素是否为最后一个
            if (x == arr.length - 1) {
                // 就直接拼接元素和"]"
                s += arr[x];
                s += "]";
            } else {
                // 就拼接元素和逗号以及空格
                s += arr[x];
                s += ", ";
            }
        }

        // 输出拼接后的字符串
        System.out.println("最终的字符串是:" + s);
    }
}

改进版:

public class StringTest2 {
    public static void main(String[] args) {
        // 前提是数组已经存在
        int[] arr = { 1, 2, 3 };

        // 写一个功能,实现结果
        String result = arrayToString(arr);
        System.out.println("最终结果是:" + result);
    }

    /*
     * 两个明确: 返回值类型:String 参数列表:int[] arr
     */
    public static String arrayToString(int[] arr) {
        // 定义一个字符串
        String s = "";

        // 先把字符串拼接一个"["
        s += "[";

        // 遍历int数组,得到每一个元素
        for (int x = 0; x < arr.length; x++) {
            // 先判断该元素是否为最后一个
            if (x == arr.length - 1) {
                // 就直接拼接元素和"]"
                s += arr[x];
                s += "]";
            } else {
                // 就拼接元素和逗号以及空格
                s += arr[x];
                s += ", ";
            }
        }

        return s;
    }
}
02.字符串的反转

import java.util.Scanner;

//字符串反转

public class fanzhuan {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(“请输入一个字符串”);
String sc = input.next();
String s = myReverse(sc);
System.out.println(“实现功能后的结果是:” + s);
}
/*String s = “”;
for (int x = sc.length() - 1; x >= 0; x–) {
s += sc.charAt(x);//方法2:char[] ch = s.toCharArray();将字符串转成字符数组
}
System.out.println(s);*/
//同过功能实现
public static String myReverse(String ss){
String result = “”;

        // 把字符串转成字符数组
        char[] chs = ss.toCharArray();

        // 倒着遍历字符串,得到每一个字符
        for (int x = chs.length - 1; x >= 0; x--) {
            // 用新字符串把每一个字符拼接起来
            result += chs[x];
        }
        return result;
    }
}
03.在大串中查找小串出现的次数
解析:
A:定义一个统计变量,初始化值是0
    B:先在大串中查找一次小串第一次出现的位置
        a:索引是-1,说明不存在了,就返回统计变量
            b:索引不是-1,说明存在,统计变量++
        C:把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串
        D:回到B
public class ds {
public static void main(String[] args) {
    String ss="ijavaljavayjava";
    String s1="java";
    int count1=seek(ss,s1);
    System.out.println("字符串共出现了"+count1+"次");
    }

    public static int seek(String sd,String sx){
        int x=sd.indexOf(sx);//查找字符串s1在s中出现的位置,并返回值赋给x;
        int count=0;
        while(x!=-1){
            count++;
            int s=x+sx.length();
            sd=sd.substring(s);//从查到字符串加字符串长度位置进行截取;
            x=sd.indexOf(sx);
        }
        return count;

    }

}






CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b或2023b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪(CEEMDAN)、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 1. EMD(经验模态分解,Empirical Mode Decomposition) 2. TVF-EMD(时变滤波的经验模态分解,Time-Varying Filtered Empirical Mode Decomposition) 3. EEMD(集成经验模态分解,Ensemble Empirical Mode Decomposition) 4. VMD(变分模态分解,Variational Mode Decomposition) 5. CEEMDAN(完全自适应噪声集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 6. LMD(局部均值分解,Local Mean Decomposition) 7. RLMD(鲁棒局部均值分解, Robust Local Mean Decomposition) 8. ITD(固有时间尺度分解,Intrinsic Time Decomposition) 9. SVMD(逐次变分模态分解,Sequential Variational Mode Decomposition) 10. ICEEMDAN(改进的完全自适应噪声集合经验模态分解,Improved Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 11. FMD(特征模式分解,Feature Mode Decomposition) 12. REMD(鲁棒经验模态分解,Robust Empirical Mode Decomposition) 13. SGMD(辛几何模态分解,Spectral-Grouping-based Mode Decomposition) 14. RLMD(鲁棒局部均值分解,Robust Intrinsic Time Decomposition) 15. ESMD(极点对称模态分解, extreme-point symmetric mode decomposition) 16. CEEMD(互补集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition) 17. SSA(奇异谱分析,Singular Spectrum Analysis) 18. SWD(群分解,Swarm Decomposition) 19. RPSEMD(再生相移正弦辅助经验模态分解,Regenerated Phase-shifted Sinusoids assisted Empirical Mode Decomposition) 20. EWT(经验小波变换,Empirical Wavelet Transform) 21. DWT(离散小波变换,Discraete wavelet transform) 22. TDD(时域分解,Time Domain Decomposition) 23. MODWT(最大重叠离散小波变换,Maximal Overlap Discrete Wavelet Transform) 24. MEMD(多元经验模态分解,Multivariate Empirical Mode Decomposition) 25. MVMD(多元变分模态分解,Multivariate Variational Mode Decomposition)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值