IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据进阶17-有关String类与StringBuffer类 -> 正文阅读

[大数据]大数据进阶17-有关String类与StringBuffer类

这一块的主要内容是有关Java中有关String类以及StringBuffer类的内容

String类

String类的转换功能

  • byte[] getBytes()
  • char[] toCharArray()
  • static String valueOf(char[] chs)
  • static String valueOf(int i)
  • String toLowerCase()
  • String toUpperCase()
  • String concat(String str)

代码举例:

public class StringDemo10 {
    public static void main(String[] args) {
        //将字符串转换为字节数组
        //byte[] getBytes()
        String s = "BigData";
        byte[] bytes = s.getBytes();
        System.out.println(bytes);//打印的只是地址,想要打印内容,需要遍历出来
        for(int i=0;i<bytes.length;i++){
            System.out.println(bytes[i]);//打印出来的是ASCII码
        }
        System.out.println("****************************************");

        //将字符串转换为字符数组
        //char[] toCharArray()
        char[] chars = s.toCharArray();
        System.out.println(chars);
        for(int i=0;i<chars.length;i++){
            System.out.println(chars[i]);
        }
        System.out.println("****************************************");

        //将字符数组转换为字符串
        //static String valueOf(char[] chs)
        String s1 = String.valueOf(chars);
        System.out.println(s1);
        System.out.println("****************************************");

        //将int类型的数据转换成字符串
        //static String valueOf(int i)
        String s2 = String.valueOf(100);
        System.out.println(s2);
        System.out.println("****************************************");

        //将字符串中的字符都转成小写
        String s3 = s.toLowerCase();
        System.out.println(s3);
        System.out.println("****************************************");

        //将字符串中的字符都转成大写
        String s4 = s.toUpperCase();
        System.out.println(s4);
        System.out.println("****************************************");

        //拼接字符串
        //String concat(String str)
        String s5 = "hello";
        String s6 = "world";
        String s7 = s5 + s6;
        String s8 = s5.concat(s6);
        System.out.println("s5:"+s5);
        System.out.println("s6:"+s6);
        System.out.println("s7:"+s7);
        System.out.println("s8:"+s8);

    }
}
//[B@28d93b30
//66
//105
//103
//68
//97
//116
//97
//****************************************
//BigData
//B
//i
//g
//D
//a
//t
//a
//****************************************
//BigData
//****************************************
//100
//****************************************
//bigdata
//****************************************
//BIGDATA
//****************************************
//s5:hello
//s6:world
//s7:helloworld
//s8:helloworld
  • 小练习:将一个字符串的首字母转换成大写,其余转换成小写
    举例:helloWORld->Helloworld
    代码:
public static void main(String[] args) {
        //把一个字符串的首字母转换成大写,其余为小写
        String s = "helloWorld";

        //获取第一个字符
        String c = s.substring(0,1);

        //获取除了第一个字符之外的所有字符
        String s1 = s.substring(1);

        //将第一个字符转换成大写
        String  c1 = c.toUpperCase();

        //将剩下的字符转换为小写
        String s2 = s1.toLowerCase();
        System.out.println(c1.concat(s2));

        //链式编程改进
        System.out.println(s.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase()));
        //链式编程
        String s4 = "helloWORld";
        System.out.println(s4.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase()));
    }

String类的其他功能

替换功能

  • String replace(char old,char new)
  • String replace(String old,String new)
String s = "HelloWorld";
        String replace = s.replace("l", "m");
        System.out.println(replace);//HemmoWormd
        String replace1 = s.replace("llo", "ppl");
        System.out.println(replace1);//HepplWorld

去除字符串两空格

  • String trim()
String s1 = "  HelloWorld   ";
        String trim = s1.trim();
        System.out.println(trim);//HelloWorld

按字典顺序比较两个字符串

  • int compareTo(String str)
  • int compareToIgnoreCase(String str)

```c
String s5 = "hello";//h的ASCII码104
        String s6 = "hello";
        String s7 = "abc";//a的ASCII码97
        String s8 = "qwe";//q的ASCII码113
        String s9 = "hel";
        System.out.println(s5.compareTo(s6));   //两个相等,相减为0
        System.out.println(s5.compareTo(s7));   //h的ASCII码和a的ASCII码两个相减,结果是7
        System.out.println(s5.compareTo(s8));   //h的ASCII码和q的ASCII码两个相减,结果是-9
        System.out.println(s5.compareTo(s9));   //前面的都比较完了,剩下几个字符,结果就是几

String类练习

把数组中的数据按照指定格式拼接成一个字符串

举例:int[] arr = {1,2,3}; 输出:[1,2,3]
代码:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);


//        int[] arr = {1,2,3};

        int[] arr = new int[3];
        for (int i=0;i<arr.length;i++){
            System.out.println("请输入第"+(i+1)+"个数字");
            int num = sc.nextInt();
            arr[i] = num;
        }
        String s = arrayToString(arr);
        System.out.println(s);


    }

    public static String arrayToString(int[] arr){
        //1、定义一个空字符串对象
        String s ="";

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

        //3、遍历int数组,得到每一个元素
        for(int i=0;i<arr.length;i++){
            //4、判断是否读到最后一个,如果是最后一个,在尾部拼接"]"
            if(i == arr.length-1){
                s+=arr[i];
                s+="]";
            }else {
                s+=arr[i];
                s+=",";
            }
        }

        return s;
    }

字符串反转

举例:键盘录入“abc” 输出结果:“cba”

public static void main(String[] args) {
        /*
                字符串反转
                录入abc
                输出cba
                1、键盘录入一串字符
                2、定义一个空字符串
                3、将字符串转换成字符数组
                4、倒着遍历字符串,得到每一个字符
                5、用新的字符串拼接得到每一个字符
                6、输出
         */
        System.out.println("请输入一串字符");
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String over_s = "";
        char[] chars = s.toCharArray();
        for(int i=chars.length-1;i>=0;i--){
            over_s += chars[i];
        }
        System.out.println("反转之后的字符串");
        System.out.println(over_s);
    }

统计大串中小串出现的次数

举例:
在字符串“woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagune”中Java出现了五次

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入大串");
        String maxString = sc.next();
        System.out.println("请输入小串");
        String minString = sc.next();

        int result = findString(maxString,minString);
        System.out.println("大串中小串出现的次数为:"+result);
    }

    public static int findString(String maxString,String minString){
        //定义出现的次数
        int count = 0;
        //大串中小串的位置
        int index = maxString.indexOf(minString);

        if(index == -1){
            System.out.println("大串中没有这个小串");
            return 0;
        }

        while (index != -1){
            count ++;
            //被截取的长度
            int startindex = index + minString.length();
            maxString = maxString.substring(startindex);
            index = maxString.indexOf(minString);
        }
        return count;
    }

StringBuffer类

  • StringBuffer:
    • 线程安全,可变的字符序列。字符串缓冲区就像一个String,但可以修改
    • 在任何时间点,它包含一些特定的字符序列
    • 但可以通过某些方法调用来更改序列的长度和内容
    • 简单来说:就是一个线程安全的可变字符串
  • StringBuffer和String的区别
    • 前者长度和内容都可以改变,后者不可改变
    • 前者可以提前给出缓冲区,可以进行字符串拼接不会重新开辟空间;后者会开辟新的空间,会浪费太多资源
  • StringBuffer的构造方法
    • public StringBuffer()
    • public StringBuffer(int capacity)
    • public StringBuffer(String str)
  • StringBuffer的方法
    • public int capacity()返回当前容量(容量是新插入字符可用的存储量,超过此值将进行重新分配)
    • public int length()返回长度(字符数)
  • 线程安全简单描述:
    • 线程是安全的;安全,代表着有同步存在,数据是安全的,效率不高
    • 不安全,不同步,效率高
    • 安全问题和效率问题,一直都是一个矛盾点
    • 安全:售票、取号、银行业务(都是一个一个进行的)
    • 效率:论坛(可以同步进行的)

StringBuffer的构造方法与方法的使用

public static void main(String[] args) {
        //public StringBuffer()无参构造方法
        StringBuffer sb = new StringBuffer();
        //如果这里打印的是地址值,那么就说明没有重写toString方法,如果打印的是空,说明重写了toString方法
        System.out.println("sb:"+sb);
        System.out.println(sb.capacity());//打印容量
        System.out.println(sb.length());//打印长度
        System.out.println("**********************************");

        //public StringBuffer(int capacity)
        StringBuffer sb2 = new StringBuffer(50);
        System.out.println("sb2:"+sb2);
        System.out.println(sb2.capacity());
        System.out.println(sb2.length());
        System.out.println("**********************************");

        //public StringBuffer(String str)
        StringBuffer sb3 = new StringBuffer("hello");
        System.out.println("sb3:"+sb3);
        System.out.println(sb3.capacity());//本身的容量是16,加上字符串的长度5,一共是21
        System.out.println(sb3.length());
    }

StringBuffer类的成员方法

添加功能

  • public StringBuffer append(String str)
    可以把任意类型的数据添加到字符串缓冲区中,并且返回的是字符串缓冲区本身
  • public StringBuffer insert(int offset,String str)
    在指定位置插入数据到字符串缓冲区
public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        StringBuffer sb2 = sb.append("hello");//append将任意类型数据添加到字符串缓冲区,返回的是字符串缓冲区本身

        System.out.println(sb);
        System.out.println(sb2);
        System.out.println(sb == sb2);//true


        sb.append(true);
        sb.append("world");
        sb.append(123);
        //这两个返回的是同一个内容,因为返回的都是字符串缓冲区本身
        System.out.println(sb);//hellotrueworld123
        System.out.println(sb2);//hellotrueworld123

        sb.append(12.34f).append("java").append(23).append(false);
        System.out.println(sb);
        System.out.println(sb2);
    }
}
//hello
//hello
//true
//hellotrueworld123
//hellotrueworld123
//hellotrueworld12312.34java23false
//hellotrueworld12312.34java23false

删除功能

  • public StringBuffer deleteCharAt(int index)
  • public StringBuffer delete(int start,int end)
public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append(true).append(12).append(12.34f).append("hello");
        System.out.println(sb);
        System.out.println("**********************************");

        //删除指定范围的字符(左闭右开)
        sb.delete(0,4);
        System.out.println(sb);
        System.out.println("**********************************");

        //删除指定位置字符
        sb.deleteCharAt(2);
        System.out.println(sb);
        System.out.println("**********************************");

        //删除所有字符串
        sb.delete(0,sb.length());
        System.out.println(sb);
        System.out.println("**********************************");
    }

替换功能

  • public StringBuffer replace(int start,int end,String str)
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer();
        sb.append(12).append(true).append("hello").append(34.56f);
        System.out.println(sb);
        System.out.println("*********************************");

        sb.replace(2,5,"world");
        System.out.println(sb);
    }
}
//12truehello34.56
//*********************************
//12worldehello34.56

反转功能

  • public StringBuffer reverse()(如果序列中包含任何替代对,则将它们视为单个字符进行反向操作)
public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("StringBuffer");
        sb.reverse();
        System.out.println(sb);
    }
}
//reffuBgnirtS

截取功能

  • public String substring(int start)
  • public String substring(int start,int end)
    截取功能和前面几个功能的不同:返回值是String类型,本身没有发生改变

从下面的举例代码中我们可以看到,输出的sb1是String类型,本身的sb并没有发生任何变化

public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append(12).append("hello").append(12.34f).append(true);
        System.out.println(sb);
        System.out.println("********************************");

        String sb1 = sb.substring(0, 4);
        System.out.println(sb1);
        System.out.println("********************************");
        System.out.println(sb);
    }
}
//12hello12.34true
//********************************
//12he
//********************************
//12hello12.34true

StringBuffer类练习

String和StringBuffer的相互转换

public static void main(String[] args) {
        //不能直接把字符串String类型直接赋给StringBuffer类型
        String s = "hello";
        //Java: 不兼容的类型: java.lang.String无法转换为java.lang.StringBuffer
        //StringBuffer sb = s;

//        String->StringBuffer
        //1.通过构造方法
        StringBuffer sb = new StringBuffer(s);
        System.out.println(sb);
        //2.通过调用StringBuffer中的append方法
        StringBuffer sb1 = new StringBuffer().append(s);
        System.out.println(sb1);


//        StringBuffer->String
        StringBuffer sb3 = new StringBuffer("helloworld");
        //1.调用String的构造方法
        String s4 = new String(sb3);
        System.out.println(s4);
        //2.调用StringBuffer的toString方法
        String s5 = sb3.toString();
        System.out.println(s5);
//hello
//hello
//helloworld
//

 - List item

helloworld

把数组拼接成一个字符串

public static void main(String[] args) {
        //1.用String拼接
        int [] arr = new int[]{1,2,3,4,5};
        String s = "";
        s += "[";

        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s += arr[i];
                s += "]";
            }else{
                s += arr[i];
                s += ",";
            }
        }
        System.out.println(s);//[1,2,3,4,5]


        //2.用StringBuffer拼接
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                sb.append(arr[i]);
                sb.append("]");
            }else{
                sb.append(arr[i]);
                sb.append(",");
            }
        }
        System.out.println(sb);//[1,2,3,4,5]
    }

把字符串反转

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数据");
        String s = sc.next();

        //方式一,用字符串拼接
        String result = "";
        //将输入的字符串转换成字符数组,再拼接
        char[] chars = s.toCharArray();
        for(int i=s.length()-1;i>=0;i--){
            result += chars[i];
        }
        System.out.println(result);

        System.out.println("*******************************");

        //方式二,使用StringBuffer中的reserve()方法
        StringBuffer sb = new StringBuffer(s);
        StringBuffer reverse = sb.reverse();
        //将String转换成StringBuffer之后,还要再转回来
        String s1 = new String(reverse);//使用构造函数,或者toString的方法
//        System.out.println(reverse);
        System.out.println(s1);

        System.out.println("*******************************");
        System.out.println("链式编程改进");
        System.out.println(new StringBuffer(s).reverse().toString());
    }
}
//请输入数据
//12345
//54321
//*******************************
//54321
//*******************************
//链式编程改进
//54321

判断一个字符串是否是对称字符串

(例如"abc"不是字符串,“aba”,“abba”,“aaa”,"mnanm"是对称字符串)

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入你想判断的字符串");
        String next = sc.next();
        char[] chars = next.toCharArray();
        boolean flag = true;

        //方式一、一个一个比较(要先将字符串转换成字符数组)
//        for(int start=0,end=next.length()-1;start<=end;start++,end--){
//            if(chars[start] != chars[end]){
//                System.out.println("不是对称字符串");
//                flag =false;
//                break;
//            }
//        }
//        if(flag == true){
//            System.out.println("是对称字符串");
//        }

        //方式二、使用StringBuffer的反转方法,反转之后,如果一样,就是对称字符串;不一样就不是
        StringBuffer sb = new StringBuffer(next);
        StringBuffer sb1 = sb.reverse();
        String s = sb1.toString();
        //链式编程改进
        String s1 = new StringBuffer(next).reverse().toString();
        
        if(s.equals(next)){
            System.out.println("是对称字符串");
        }else{
            System.out.println("不是对称字符串");
        }
    }

面试题:String、StringBuffer、StringBuilder类的区别

1、String、StringBuffer、StringBuilder的区别
- String的内容是不可变的,而StringBuffer、StringBuilder的内容是可变的
- StringBuffer是同步线程安全的,数据安全,效率低
- StringBuilder是不同步的,数据不安全,效率高
2、StringBuffer和数组的区别
两个都可以看作是一个容器,装一些数据,但是,StringBuffer最终存储的数据是一个字符串数据,而数组可以存放多宗数据,但是同一个数组里面的元素类型一致

看程序写结果

  • String作为参数传递
  • StringBuffer作为参数传递
public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "world";
        System.out.println(s1+"---"+s2); //hello---world
        change(s1,s2);
        System.out.println(s1+"---"+s2); //hello---world

        StringBuffer sb1 = new StringBuffer("hello");
        StringBuffer sb2 = new StringBuffer("world");
        System.out.println(sb1+"---"+sb2); //hello---world
        change2(sb1,sb2);
        System.out.println(sb1+"---"+sb2); //hello---worldworld
    }
    
    public static void change2(StringBuffer sb1,StringBuffer sb2){
        sb1 = sb2;
        //只要是调用方法的就会发生改变
        sb2.append(sb1);
    }

    //方法里面的数据发生改变,对外面数据本身没有影响
    public static void change(String s1,String s2){
        s1 = s2;
        s2 = s1+s2;
    }

感谢阅读,我是啊帅和和,一位大数据专业即将大四学生,祝你快乐。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:18:18  更:2021-08-09 10:20:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 4:40:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码