java基础--字符串的用法(2)

一、前言(在java中字符串的重要性)

在 Java 编程中,字符串(String)的重要性不言而喻,它几乎贯穿于所有的应用程序和系统中。以下是 Java 中字符串重要性的几个方面:

1. 数据表示和处理

  • 文本数据:字符串是表示文本数据的主要方式。无论是用户输入、文件读取还是网络传输,文本数据通常都以字符串的形式存在。
  • 数据格式化:字符串用于格式化输出,如日志记录、用户界面显示等。

2. 用户交互

  • 输入输出:用户通过字符串与程序进行交互,输入数据和接收反馈。例如,命令行参数、表单输入、控制台输出等。
  • 错误信息:错误和异常信息通常以字符串形式呈现,帮助开发者调试和用户理解问题。

3. 数据存储和传输

  • 文件操作:读写文件时,文本内容通常以字符串形式处理。
  • 网络通信:在网络传输中,数据包和消息通常以字符串形式编码和解码。

4. 业务逻辑处理

  • 数据验证:字符串用于验证用户输入的格式和内容是否符合要求。
  • 数据转换:字符串与其他数据类型(如数字、日期)之间的转换是常见的业务需求。

二、案例一(字符串操作练习)

 我们先在main函数外面写一个方法,,用来拼接字符串。

public class String_contact {
    public static void main(String[] args) {
        int []arr={1,2,3};
        String  res=arr_to_string(arr);
        System.out.println(res);



    }
    public static String arr_to_string (int []arr){
        String result1="[";
        String result2="]";
//保证数组中是有值
        if(arr==null){

            return "";}
        if(arr.length==0){
            return "[]";}
        for(int i=0;i<arr.length;i++){


            if(i==arr.length-1){
                result1=result1+arr[i];
            }
            else{result1=result1+arr[i]+",";}
        }
        result1=result1+result2;

        return result1;


    }

}

 解释:因为在定义方法的时候,是String类型,所以返回值就是 return 一个字符串类型;在for循环中,如果i==arr.length-1时,说明到了最后一个元素,我们就不用打印“,”,但是在之前的要有逗号所以需要再循环中做一个判断。最后在主函数中调用方法。

 三、案例二(字符串操作练习)

package String_operations;

import java.util.Scanner;

    public class String_reverse {
    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
          System.out.println("请输入一个字符串");
String res=sc.next();
 String result=arr_to_reverse(res);
        System.out.println(result);
}
pubic static String arr_to_reverse(String res){
String result="";
for(int i=res.length-1;i>=0;i++){
char c =res.charAt(i);
result=result+c;
}
return result;
} 
}

解释:因为题目要求键盘输入,所以要导入一个输入库,然后 再方法中用到charAt字符串操作,charAt(int index)方法:括号里传入整型参数,可以获取到该下标位置的String数组内容,通常用于遍历字符串。需要注意的是因为需要逆序输出,在循环中i的值是递减的要使用i--。

至于charAt方法和tocharArray方法可以参考:Java-String字符串的常见方法总结_java string charat-CSDN博客

 StringBuilder方法:

 StringBuilder:可以看成一个容器来存放数据。

  StringBuilder有一些常见的方法:1.append可以往容器里面添加数据,这个数据类型并没有限制。2.reverse可以翻转容器的中的值。3.toString 因为使用 StringBuilder这个方法,容器里面的值都是 StringBuilder类型的,但是我们需要把这个 StringBuilder类型转成String类型。

 我们先来拿一到题目来试试:
package String_operations;

import java.util.Scanner;

public class demo01 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String res=sc.next();
        String result=arr_reverse(res);
        if ( res.equals(result) ){
            System.out.println("shi dui cheng de");
        }
        else {
            System.out.println("bu shi dui cheng de");
        }

    }
    public  static  String arr_reverse(String res){
        StringBuilder sb=new StringBuilder(res);
        String s= sb.reverse().toString();
        return  s;
    }
}

 解释:这里与上面的反转字符串的方式不一样,这里面使用了一个容器来存储数据。然后调用StringBuild的方法。

StringBuild的使用场景:1.字符串的拼接     2.字符串的反转

StringJoiner方法:

 可以观察到,如果我们使用SringBuild的方式来达到代码会变的长且效率降低。我们可以通过StringJoiner的方式来实现同样的效果。StiringJoiner是jdk8以后出来的。

四、字符串底层原理 

这里我们主要介绍一下字符串的底层原理,来帮助大家深刻了解字符串的使用。

 

 1、字符串拼接等号左边有没有变量到底有什么区别?

 我们首先看到字符串的拼接问题:在拼接时有没有左边有没有变量!

1、没有变量的情况:例如左边的图,这个程序在运行时,会在javac编译,系统会提前触发字符串的优化机制,那在编译之前就已经是最终结果了。

2、有变量的情况:在jdk8以前,在程序运行时,系统在底层会先使用StringBuild创建一个对象,然后调用append方法添加数据,最后使用toString变成字符串类型,关键是在toString过程结束时,它是重新new了一个行的字符串对象,如果向右边那张图显示,过多的变量就会产生过多的对象,从而导致程序开销大,运行效率下降等问题!(一个加号就相当于创建2个对象)

在jdk8版本之后,系统会提前预估一下字符串的大小,然后把要拼接的内容存到一个数组中,然后new一个新的字符串。

 2、 为什么说StringBuild可以提高效率?

 如图所示:当我们new了一个StringBuild的对象时,就会在堆内存中创建一个对象,系统会分配一个地址,这里假设0x0011,当我们调用append方法时,这里的abc都是先从串池中拿出来,然后放到StringBuild这个容器里面,所以整个过程就这new了一个对象,内存开销也变小了。程序的效率自然就提升了。

  3、StringBuild这么厉害,那它会爆掉吗?

显然,你的担心是多余的,StringBuild的默认长度是16,如果你存放的东西超过16,那StringBuild会自动扩充到16*2+2=34这个长度,那如果也超出了34,就按照你实际输入的东西长度来算。

4、总结--字符串原理 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值