zoukankan      html  css  js  c++  java
  • Java String StringBuffer

    1、String类

    (1)概述:

    String类代表字符串,字符串是常量,创建之后不能更改,一旦这个字符串确定了,就会在内存中(堆中的常量池)生成这个字符串,字符串本身不能改变,但变量的地址是能够改变的,字符串的本质是一个字符的数组。

    (2)字符串的构建

    字符串中有大量的的重载构造方法,通过String类的构造方法可以完成字符穿的构建,还可以通过双引号的方式进行创建对象

    两者的是否相同?

    package com.oracle.demo02;
    
    public class Demo02 {
    
        public static void main(String[] args) {
            String str1="aaabbb";
            String str2=new String("aaabbb");
            System.out.println(str1==str2);
            System.out.println(str1.equals(str2));
    
        }
    
    }

    str1创建在内存中只有一个对象

    str2创建在内存中有两个对象,一个 new的对象在堆中,一个字符串本身对象,在字符串常量池中

     (3)String构造方法

    -------------------String()初始化一个新创建的String对象,表示一个空字符序列

    例如:String s1 = new String(); //创建String对象,字符串中没有内容

    ------------------- String(byte[  ] bytes)通过平台使用的默认字符解码指定byte数组,构建新的String

     例如:byte[] bys = new byte[]{97,98,99,100};

    String s2 = new String(bys);

    --------------------String(byte[  ] bytes  int offset  ,int  length )通过平台使用的默认字符解码指定byte子数组,构建新的String

    例如:String s3 = new String(bys, 1, 3); //创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素

    --------------------String(char[ ] values) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

    例如:

    char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};

    String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容

    --------------------String(char[] value, int offset, int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

    例如:

    String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素

    (4)String类的方法查找

    ---------------length()返回字符串的长度

    String aaa="abcdefgrthajnsdjkcv";
            int b=aaa.length();
            System.out.println(b);

    ----------------------获取部分字符串substring(int beginindex)或者substring(int beginIndex ,  int endIndex)

    ---------------------判断是否以xxx为开头starsWith(xxx)返回值为true或false

    ----------------------判断是否以xxx为结尾endsWith(xxx)返回值为true或false

    ----------------------判断字符串是否包含另一个字符contains( char   s)判断是否包含指定字符串,包含返回true,不包含返回false

    String str = "abcde";
    int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
    boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false

    ----------------------- 将字符串转成一个字符数组。或者字节数组。.getBytes()转换成一个数组。toCharArray()转换成一个字符数组

    String str = "abcde";
    char[] chs = str.toCharArray();
    byte[] bytes = str.getBytes();

     

    -------------------------- 判断两个字符串中的内容是否相同equals()

     --------------------------判断两个String是否相等,不考虑大小equalsIgnoreCase()

    String str = "abcde";
    String str2 = "abcde";
    String str3 = "hello";
    boolean b1 = str.equals(str2);
    boolean b2 = str.e/quals(str3);

    ---------------------------------获取该字符串的内容toString()

    public class Demo02 {
        public static void main(String[] args) {
            String str = new String("hello");
            System.out.println( str.toString() );
            System.out.println(str);
        }
    }

     还有:

    l 判断该字符串的内容是否为空的字符串

    l 获取给定的字符,在该字符串中第一次出现的位置

    l 获取该字符串中指定位置上的字符

    l 把该字符串转换成 小写字符串

    l 把该字符串转换成 大写字符串

    l 在该字符串中,将给定的旧字符,用新字符替换

    l 在该字符串中, 将给定的旧字符串,用新字符串替换

    l 去除字符串两端空格,中间的不会去除,返回一个新字符串

    public class Demo03 {
        public static void main(String[] args) {
            String str="hellojavanihaojava.txt";
            //求字符串长度
            System.out.println(str.length());
            //截取字符串
            System.out.println(str.substring(3));
            System.out.println(str.substring(3,5));
            //判断前缀
            System.out.println(str.startsWith("b"));
            //判断结尾
            System.out.println(str.endsWith(".txt"));
            //判断一个字符串中是否包含另一个字符串
            System.out.println(str.contains("java"));
            //返回一个字符串在另一个字符串中第一次出现的索引值
            //如果不存在该字符串则返回-1
            System.out.println(str.indexOf("5"));
            String str1="nihaojava";
            //将字符串转为字节数组
            byte[] b1=str1.getBytes();
            for(int i=0;i<b1.length;i++){
                System.out.print(b1[i]+" ");
            }
            //将字符串转为字符数组
            char[] c1=str1.toCharArray();
            for(int j=0;j<c1.length;j++){
                System.out.print(c1[j]+" ");
            }
            //判断两个字符串是否内容相同(忽略大小写)
            System.out.println(str1.equalsIgnoreCase("NiHaojava"));
        }
    }

     String类方法使用练习

     题目一:获取指定字符串中,大写字母、小写字母、数字的个数。

    package demo01;
    
    public class Demo03 {
            public static void main(String[] args) {
                String str="ADSFGbaersg1123125337";
                int bigCount = 0; //大写字母的个数
                int smallCount = 0; //小写字母的个数
                int numberCount = 0; //数字的个数
                for (int i=0; i < str.length(); i++) {
                     char ch = str.charAt(i); //获取指定位置上的字符
                    if (ch>='A' && ch<='Z') {
                        bigCount++;
            } else if (ch>='a' && ch<='z') {
            smallCount++;
            } else if (ch>='0' && ch<='9') {
                    numberCount++;
            }
            }
            System.out.println("大写字母个数:"+bigCount);
            System.out.println("小写字母个数:"+smallCount);
            System.out.println("数字个数:"+numberCount);
            }
            }
                

    l 题目二:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串。

    package demo01;
    
    public class Demo04 {
        public static void main(String[] args) {
            String str="aA";
            //获取第一部分为字符串
            String start = str.substring(0,1);
            //获取第二部分为字符串
            String end = str.substring(1);
            //把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
            String big = start.toUpperCase();
            String small = end.toLowerCase();
            //把两部分字符串连接在一起,得到一个完整的字符串
            System.out.println(big+small);
                }
    }

    l 题目三:查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。

    public static int getCount(String big, String small){
        int count = 0; //出现小串的次数
        int index = -1;//出现小串的位置
        /*
            while的循环条件三步骤:
            步骤一. big.indexOf(small) 获取小串在大串中出现的位置
            步骤二. 把小串出现的位置,赋值给变量index
            步骤三. 判断出现的位置是否为-1, 如果位置等于-1,说明大串中已经查询不到小串了;如果位置不等于-1,那么,进行循环,完成次数累加与修改大串的操作
    */
        while ((index = big.indexOf(small)) != -1 ){
            count++;//出现次数+1
            //更改大串内容
            big = big.substring(index+1);
    }
    return count;
    }

     练习2

    用代码演示String类中的以下方法的用法
    (1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
    (2)char charAt(int index): 返回索引上的字符
    (3)String toLowerCase(): 字符串转成小写
    (4)String toUpperCase(): 字符串转成大写
    (5)String replace(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
    (6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
    (7)String trim(): 去掉字符串两端空格

        public static void main(String[] args) {
            //(1)boolean isEmpty(): 判断字符串是不是空串,如果是空的就返回true
            String str1=new String();
            boolean a=str1.isEmpty();
            System.out.println(a);
            //(2)char charAt(int index): 返回索引上的字符
            String str2="abcde";
            char b=str2.charAt(2);
            System.out.println(b);
            //(3)String toLowerCase(): 字符串转成小写
            String str3="ABCDEFG";
            String c=str3.toLowerCase();
            System.out.println(c);
            //(4)String toUpperCase(): 字符串转成大写
            System.out.println(c.toUpperCase());
            //(5)String repalce(char oldChar, char newChar): 将字符串中的老字符,替换为新字符
            String str4="abc";
            String d=c.replace("b","s");
            System.out.println(d);
            //(6)String repalce(String old, String newstr): 将字符串中的老字符串,替换为新字符串
            String e=d.replace(d, "falg");
            System.out.println(e);
            //(7)String trim(): 去掉字符串两端空格
            String str5="   ffff   ";
            System.out.println(str5);
            String f=str5.trim();
            System.out.println(f);    
        }//main
    
    }/

     2、字符串缓冲区

    字符串缓冲区支持可变的字符串,

    StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

     (1)StringBuffer类

     StringBuffer方法的使用:

    -----------------append():将指定字符串添加到此字符序列

    ----------------delete(int start,int end)删除从start到end的字符

    -----------------insert(int offset ,String str)将str插入该字符串中

    -----------------replace(int start ,int end .String str)使用str替换该字符串中从start到end的字符

    -----------------reverse()将字符串使用反序取代

    -----------------toString()返回此序列中数据的字符串表现形式

    创建一个字符串缓冲区对象。用于存储数据。
    StringBuffer sb = new StringBuffer();
    sb.append("haha"); //添加字符串
    sb.insert(2, "it");//在指定位置插入
    sb.delete(1, 4);//删除
    sb.replace(1, 4, "cast");//替换指定范围内的内容
    String str = sb.toString();

    练习:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串  格式 [34,12,89,68]

    public static String toString_2(int[] arr) {
            StringBuffer sb = new StringBuffer();        
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                if(i!=arr.length-1){
                    sb.append(arr[i]+",");
                }else{
                    sb.append(arr[i]+"]");
                }
            }        
            return sb.toString();
        }

      StringBuilder类它也是一个可变的字符序列它比 StringBuffer 要快。

  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/cgj1994/p/10004057.html
Copyright © 2011-2022 走看看