这一块的主要内容是有关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);//HemmoWormdString 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码104String s6 = "hello";String s7 = "abc";//a的ASCII码97String s8 = "qwe";//q的ASCII码113String s9 = "hel";System.out.println(s5.compareTo(s6));   //两个相等,相减为0System.out.println(s5.compareTo(s7));   //h的ASCII码和a的ASCII码两个相减,结果是7System.out.println(s5.compareTo(s8));   //h的ASCII码和q的ASCII码两个相减,结果是-9System.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输出cba1、键盘录入一串字符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,一共是21System.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);//truesb.append(true);sb.append("world");sb.append(123);//这两个返回的是同一个内容,因为返回的都是字符串缓冲区本身System.out.println(sb);//hellotrueworld123System.out.println(sb2);//hellotrueworld123sb.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->StringStringBuffer 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 itemhelloworld

把数组拼接成一个字符串

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---worldchange(s1,s2);System.out.println(s1+"---"+s2); //hello---worldStringBuffer sb1 = new StringBuffer("hello");StringBuffer sb2 = new StringBuffer("world");System.out.println(sb1+"---"+sb2); //hello---worldchange2(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;}

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

有关String类与StringBuffer类相关推荐

  1. java学习笔记(十)----String类和StringBuffer类

    ***String类和StringBuffer类 -------------------------- String类对象中的内容一旦被初始化就不能再改变 StringBuffer类用于封装内容可以改 ...

  2. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  3. 【JAVA SE】第十章 String类、StringBuffer类和StringBuilder类

    第十章 String类.StringBuffer类和StringBuilder类 文章目录 第十章 String类.StringBuffer类和StringBuilder类 一.String类 1.创 ...

  4. 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照

    本文主要介绍String类.StringBuffer类.StringBuilder类的差别  : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...

  5. java 调用弗雷_JAVA API(一)String类和StringBuffer类

    1.String类和StringBuffer类 在程序中经常会用到字符串,所谓的字符串就是指一连串的字符,它是由多个单个字符连接而成的.字符串中可以包含任意字符,这些字符必须包含在一对双引号" ...

  6. Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解

    常用类库 java.lang java.lang包下放置了Java开发中常用的类和接口,所以为简化该包下类的使用,java.lang包下的类在使用时不需要导入这些类 java.lang包下常用类有: ...

  7. JAVA API-----String类和StringBuffer类

    String类和StringBuffer类主要用来处理字符串,这两个类提供了很多字符串的使用处理方法.String类是不可变类,表示对象所包含的字符串类不能改变.StringBuffer类是可变类,其 ...

  8. java API(String类 和 StringBuffer类)

    java api 指的是jdk中提供的各种功能的java类. 在java中定义了String和StringBuffer两个类来包装字符串,并提供了一系列操作字符串的方法,他们都位于java.long包 ...

  9. String类、StringBuffer类、StringBuilder类的区别

    String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼 ...

  10. Java常用接口与类——String类、StringBuffer类、StringBuilder类

    >String的构造方式 //这两种方式字符串的值是相同的,但在内存中的地址不同: //s1是在常量池中,常量池中有一个hello,同一常量只会放入一次: String s1="hel ...

最新文章

  1. 2.10 第二章总结加综合问题
  2. html5 css3 设计模式,html5+css3设计模式
  3. 百度飞桨和Imagination宣布在全球AI生态系统方面开展合作
  4. OpenCV学习笔记之扫描图像
  5. fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin.git/‘: OpenSSL SSL_read: Co
  6. springmvc常用注解之@Controller和@RequestMapping
  7. CLR的程序集定位算法(转)
  8. linux面试题_2019年常见的Linux面试题及答案解析,哪些你还不会?
  9. 计算机英语单词怎么巧背,巧计英语单词的26个秘诀
  10. 射频芯片ATE测试从入门到放弃之收发机
  11. 微信公众平台测试号的申请与使用
  12. 2021年第十二届蓝桥杯省赛C/C++B组题解总结
  13. 机器学习--梯度-牛顿-拟牛顿优化算法和实现
  14. kmem_cache的创建和释放-slub分配器
  15. 李嘉诚能否再续神话?“长科版”上市内幕
  16. htc sensation软解锁、获取root权限、解网络锁
  17. 注解整理 - 元注解,lombok注解,spring 注解,springboot注解,springmvc注解
  18. 不想花钱学Python,好资源该怎么找?这里有你看不完的东西
  19. Depends: libcurl4 (= 7.58.0-2ubuntu3) but 7.58.0-2ubuntu3.13 is to be installed
  20. mysql 日期类型转换

热门文章

  1. Java面向对象前奏:酒店客房管理系统
  2. 波士顿大学计算机科学的就业,波士顿大学计算机科学本科申请(附案例)
  3. 地级市面板数据(2000-2019)四:失业+进出口+工资+规上企业+房地产等(stata版)
  4. php12生肖是哪个,生肖查询-十二属相年份查询-生肖五行查询-12生肖顺序查询
  5. 新手小坑:sql表int字段自动填0
  6. 第九十七章 SQL函数 MONTH
  7. 小象大数据全套视频教程
  8. c# 获取数字的小数位数
  9. 猫盘plus开启ssh登录
  10. snapchat 登录不上_如何在Snapchat上举报某人