java——String相关的方法汇总

Java
319
0
0
2022-11-26

创建字符串

常用的创建放到hi

// 方式一 String str = “Hello”; // 方式二 String str2 = new String(“Hello”); // 方式三 char[] array = {‘a’, ‘b’, ‘c’}; String str3 = new String(array);

intern()

在实际开发中,String创建一个对象,可以以下的格式

String str = new String(“Hello”);

但这种格式需要再重新开辟一个空间,如果想节省空间,可以使用到intern()方法

  public static void main1(String[] args) {
        String str1 = "Hello";//最主要的方式 
        String str = new String("Hello").intern();
        System.out.println(str.equals(str1));
    }

通过intern()方法可以重复利用池中的对象,不需要重新申请一个空间,再次执行intern()方法,此时就会再池中查找内容相同的字符常量,如果在池中没有找到,就把当前字符串加到池中,如果已经找到了就返回这个池中的对象,节省了空间(但实际开发中很少遇到)

equal()

想要怕段两个字符串是否相等,用==是有它的风险的,就例如:

String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2);


// 执行结果
true

以上创建字符串的方式似乎对运行结果没有产生什么影响,但是如果深究其内涵,了解到str1和str2所指向的对象相同(类似于C语言的指针),指向同一个对象,判断相等当然会返回true。

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


// 执行结果
false

但是用这种创建方式,可以看到结果并不符合预期,是因为两个新创建的对象指向不同的内存

img

因此,如果相比较两个字符串是否相等,需要用到equal()方法。

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
System.out.println("Hello".equals(str1));
// System.out.println(str2.equals(str1)); // 或者这样写也行

// 执行结果
true
true

substring()

如果想要修改字符串,需要用到这个方法。例如, 现有字符串 str = “Hello” , 想改成 str = “hello”

String str = "Hello";
str = "h" + str.substring(1);
System.out.println(str);

// 执行结果
hello

字符串与字符数组的相互转换

1.字符串->字符数组

 //字符串=》字符数组 
        String str = "hehe";
        //toCharArray()是把string中包含的字符数组拷贝过来 
        char[] data = str.toCharArray();

1.字符数组->字符串

  //字符数组=》字符串 
        //借助String的构造方法即可 
        char[] array = {'z','v','v'};
        String str2 = new String(array);
        System.out.println(str);

字符串与字节数组的相互转换

1.字符串->字节数组

 //字符串转字节数组 
        String str = "hello";
        byte[] array = str.getBytes();;

1.字节数组->字符串

//字节数组转字符串 
        String str2 = new String(array);
        System.out.println(str2);

比较字符串大小

使用 comperaTo可以比较字符串大小

compareTo 返回值 >0时,认为str1比str2大 compareTo 返回值 <0时,认为str1比str2小 compareTo 返回值 ==0时,认为str1与str2相等(内容)

  public static void main6(String[] args) {
        //比较字符串大小 
        String str1 = "hehe";
        String str2 = "haha";
        System.out.println(str1.compareTo(str2));  
    }

忽略大小写的比较方法:

 //忽略大小写 
        String str1 = "hehe";
        String str2 = "Haha";

        System.out.println(str1.equalsIgnoreCase(str2));//忽略大小写比较

判断字符串的子串

public static void main(String[] args) {
        //判定字符串字串 
        String str1 = "hello world";
        String str2 = "wor";
        System.out.println(str1.contains(str2));

        //不光能判断是否为字串,还能确定字串所处的位置 
        System.out.println(str1.indexOf(str2));
        //返回-1表示str1不包含str2 
        //返回结果是str2再str1中第一次出现的下标
    }

split()字符串拆分

 public static void main(String[] args) {
        String str = "I Live In The Home";
        String[] ret = str.split(" ");
        for (String x : ret){
            System.out.println(x);
        }
        System.out.println("原来的字符串为:" + str);
        //System.out.println(Arrays.toString(ret));
    }

输出结果为:

img

从这里可以看到,本代码是用空格拆分字符串,但是最开始的字符串不会因为字符串的分割而改变(String定义的字符串不会被修改)

注意: 这里要引出一个概念:正则表达式

   public static void main(String[] args) {
        String str = "192.43.67";
        //想按照“.”来切分 
        String[] result = str.split(".");
        for (String x : result){
            System.out.println(x);
        }
    }

以上代码没有执行结果,也就是说split方法在str里面没有找到"."这个字符,我们知道,“.”在正则表达式中是一个特殊字符 ,需要进行转义才能识别出来。如下:

   String str = "192.43.67";
        //想按照“.”来切分 
       //.在正则表达式中是一种特殊符号,为了让split识别出源字符串中的“.”,就需要进行转意义“\\.” 
        String[] result1 = str.split("\\.");
        for (String x : result){
            System.out.println(x);
        }

“\.” 里面有两个反斜杠,代表的两个转义, 一个是在java中进行转义,一个是在正则中表示转义

与之用法相同的符号有:“| + * ”

实际应用

 public static void main(String[] args) {
        //split的实际应用 
        String string = "name=zhangsan&age=14&sex=male";
        //1.先按照&进行拆分 
        String[] result = string.split("&");
        for (String tmp : result){
            //现在已经按照&拆分好了,开始进行=的拆分 
            String[] ret = tmp.split("=");
            if (ret.length != 2){
                continue;
            }
            System.out.println(ret[0] + ": " + ret[1]);
        }
    }

trim()

 public static void main(String[] args) {
        String str = "    hello world     ";
        System.out.println(str.trim());//可以去掉前后两端的空白符
    }

运行结果为:

img

substring()

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

String str = "helloworld" ;
System.out.println(str.substring(5));
System.out.println(str.substring(0, 5));

注意事项:

  1. 索引从0开始
  2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

toUpperCase() 与 toLowerCase()

String str = "helloworld" ;
System.out.println(str.toUpperCase());//让str里面的字符全部大写
System.out.println(str.toLowerCase());//让str里面的字符全部小写

如果先在想实现一个手写字母大写,其他字母小写。 那么可以有:

String result = str.substring(0,1).toUpperCase()+ str.substring(1).toLowerCase();
System.out.println(return);