String复习总结

最后都变了- 提交于 2019-12-11 19:08:14
package package1;

public class Test {
    public static void main(String[] args) {
        String str1="hello";
        String str2="hello";
        //判断两个字符串是否相等
        System.out.println(str1==str2);//true
        //str1和str指向同一个对象


        String str3=new String("hello");
        String str4=new String("hello");
        System.out.println(str3==str4);//false
        //str3和str4是两个对象
//String使用==进行字符串比较,不是比较内容,比较的是否是指向同一个对象。

        //要比较字符串的内容,使用equals方法
        System.out.println(str3.equals(str4));//true
        //如果str3为null 则会抛出异常
        System.out.println(str3.equals("hello"));
        //推荐使用这个写法
        System.out.println("hello".equals(str3));

        //字符串常量池
        String str6="helloString";
        String str7="helloString";
        String str8="helloString";
        //这种情况,hello在内存中只有一份,但是有三个引用指向它
        //这个helloString就是在字符串常量池中

        //intren()方法
        String s1=new String("dai");
        String s2="dai";
        System.out.println(s1==s2);//false
        //s1,s2,指向的是两个对象

        String s3=new String("qwe").intern();
        String s4="qwe";
        System.out.println(s3==s4);
        //此时qwe就只有一份,存在字符串常量池中

        //字符串是一种不可变对象,它的内容不可变
        String q1="hello";
        q1=q1+" world";
        q1+="!!!";
        System.out.println(q1);//hello world!!!
        //使用+=之后,q1打印的结果变量,但不是q1本身发生变换,是q1引用到其了他对象;

//修改字符串  将"Hello"改成"hello"
        String str="Hello";
        str=str.substring(4);
        System.out.println(str);//hello
        //subString(n),删除字符串的前n个字符,然后输出。
        //为啥String要不可变,好处是什么
        //1、方便实现字符串对象池
        //2、不可变对象时线程安全的
        //3、不可变对象更方便缓存hashcode,作为key是更高效的保存hashMap


        //字符与字符串
        //获取指定位置的字符charAt(n),下标从0开始
        String q="hello";
        System.out.println(q.charAt(1));//e
        //System.out.println(q.charAt(6));//产生空指针异常

//字符串与字符数组相互转换
        String abc="helloworld";
        //字符串变成字符数组
        char [] data=abc.toCharArray();
        for (int i = 0; i <data.length ; i++) {
            System.out.print(data[i]+" ");
        }//h e l l o w o r l d
        //字符数组转换成字符串
        System.out.println(new String(data));//全部转换helloworld
        System.out.println(new String(data,5,5));
        //部分转换 从第5个开始,往后5个   world

//字节与字符串
        //String转换成byte[]
        String se="helloworld";
        byte data1[] =se.getBytes();
        for (int i = 0; i <data.length; i++) {
            System.out.print(data1[i]+" ");
        }//104 101 108 108 111 119 111 114 108 100
        //上面的值都是ACSII表中对应的字母的值
        //byte[]转String
        System.out.println(new String(data));//helloword
//byte[]是把S同日ing按照一个字节一个字节的方式处理,这种适合在网络传输,数据存储这样的场景下使用,针对二进制数字。
//char[]是把String按照一个字符一个字符的方式进行处理,更适合针对文本数据操作


//字符串常见操作
        String w1="hello";
        String w2="Hello";
        //区分大小写
        System.out.println(w1.equals(w2));//false
        //不区分大小写
        System.out.println(w1.equalsIgnoreCase(w2));//true
        //compareTo()方法
        System.out.println("A".compareTo("A"));//相等返回 0
        System.out.println("A".compareTo("a"));//小于返回负数-32
        System.out.println("b".compareTo("B"));//大于返回正数32
        System.out.println("1".compareTo("2"));//-1
        //相当于用前一个减去后一个

//字符串查找:从一个完整的字符串中可以判断指定内容是否存在
        //判断一个子字符串是否存在
        String w3="helloworld";
        System.out.println(w3.contains("world"));//true

        //从头开始查找指定字符串的位置,找到返回位置的索引,找不到返回-1
        System.out.println(w3.indexOf("world"));//5 w位置的索引
        System.out.println(w3.indexOf("q"));//-1 没找到
        //如果内容重复,只能返回第一个找到的位置的值
        System.out.println(w3.indexOf("l"));//2 第一个l位置索引
        System.out.println(w3.indexOf("l",5));
        //从第5号下标开始查找"l","l"在第8号索引
        System.out.println(w3.lastIndexOf("l"));//返回"l"最后一次出现的索引

//判断开头或者结尾
        System.out.println(w3.startsWith("h"));//true
        System.out.println(w3.endsWith("d"));//true
        System.out.println(w3.startsWith("w",5));
        //判断从5号索引位置时否是w开头。

//字符串替换
        String w4="helloworld";
        System.out.println(w4.replaceAll("l","L"));//heLLoworLd
        //将"l"全部替换成"L";
        System.out.println(w4.replaceFirst("l","L"));//heLloworld
        //只替换第一个出现的l
        //由于字符串是不可变对象,替换不修改当前字符串,而是产生一个新对象

//字符串拆分
        String w5="dai zhao yong";
        //按照空格拆分
        String [] ret=w5.split(" ");
        for (String s:ret) {
            System.out.println(s);
        }
        //dai
        //zhao
        //yong

        //部分拆分
        String [] ret2=w5.split(" ",2);
        for (String s:ret2) {
            System.out.println(s);
        }
        //dai
        //zhao yong
        //拆分IP地址
        String w6="196.168.1.1";
        String [] ret3=w6.split("\\.");
        for(String s:ret3){
            System.out.println(s);
        }
        //196
        //168
        //1
        //1
//多次拆分
        String s="name=zhangsan&age=18";
        String [] ret5=s.split("&");
        for (int i = 0; i <ret5.length; i++) {
            String[] tmp=ret5[i].split("=");
            System.out.println(tmp[0]+"="+tmp[1]);
        }
        //name=zhangsan
        //age=18
 //字符串截取
        //从一个完整字符串中截取出部分内容
        //substring 前闭后开,sunstring(1,5)表示截取[1,5)
        String e1="helloworld";
        System.out.println(e1.substring(5));//从5号下标到结尾  world
        System.out.println(e1.substring(0,5));//从0号下标到五号下标  hello
//其他操作方法
      //去掉左右空格 保留中间空格
      String e2=" hello world ";
        System.out.println(e2.trim());//hello world
        //大小写转换
        String e3=" hello#$%@&*world+-=/";
        System.out.println(e3.toUpperCase());// HELLO#$%@&*WORLD+-=/
        String e4=" HELLO#$%@&*WORLD+-=/";
        System.out.println(e3.toLowerCase());// hello#$%@&*world+-=/
        //这两个方法只转换字母,不转换符号

//字符串length()
        String e5= "hello#$%@&*world+-=/";
        System.out.println(e5.length());//求长度:20
        //数组长度的length是属性,字符串的length是方法。

        //isEmpty()方法,判断是否是空
        System.out.println("hello".isEmpty());//false
        System.out.println("".isEmpty());//true
        System.out.println(new String().isEmpty());
        //新创建的字符串,没有赋值也是null
    }
}

判断一个字符中是否是全部由数字组成

package package1;
import java.util.Scanner;
public class main {
    //判断一个字符串中是否全部由数字组成
    public static boolean isNumber(String str){
        char[] data=str.toCharArray();
        for (int i = 0; i <data.length; i++) {
            if(data[i]<'0'||data[i]>'9'){
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println(isNumber(sc.nextLine()));
    }
}

自己实现String类首字母大写操作

package package1;
//String 类并没有提供首字母大写操作,需要自己实现
//示例:首字母大写
public class main2 {
    public static String fistUpper(String str){
        if("".equals(str)||str==null){
            return str;
        }
        if(str.length()>1){
            return str.substring(0,1).toUpperCase()+str.substring(1);
        }
        return str.toUpperCase();
    }
    public static void main(String[] args) {
        System.out.println(fistUpper("helloworld"));//Helloworld
        System.out.println(fistUpper(""));//
        System.out.println(fistUpper("a"));//A

    }
}

StringBuffer

public class stringbuffer {
    //StringBuffer和StringBulider
  /*
        String类特点:
        1、任何字符串常量都是String对象
        2、String常量一旦声明,不可改变
        3、如果要改变,改变的是其引用的指向
        由于String的不可更改的特性,为放方便字符串的修改,
        提供StringBuffer和StringBulider类
        StringBuffer和StringBulider大部分功能相同
   */
    //在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:

    public static void fun(StringBuffer tmp){
        tmp.append("\n").append("www.dai.com");
    }
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        //StringBuffer中的append()相当于String中的+操作和cancat操作
        sb.append("hello").append("world");
        fun(sb);
        System.out.println(sb);
//=====================================================
//String和StringBuffer都是CharSequence接口的子类
        //这个接口描述的是一系列的字符集,所以字符串是字符集的子类
        //String 和StringBuffer不能相互转换
        //如果要转换:
        //String 转StringBuffer :利用StringBuffer的构造方法或append()方法
        //StringBuffer转String 调用toString()方法。
//StringBuffer中String没有的方法
        //字符串反转:
        //public synchronized StringBuffer reverse();
        StringBuffer sb1=new StringBuffer("hello");
        System.out.println(sb1.reverse());//olleh
        //删除指定范围数据:
        StringBuffer sb3=new StringBuffer("helloworld");
        //删除从第5号下标到第10号下标的字符
        System.out.println(sb3.delete(5,10));//hello
        //插入数据
        StringBuffer sb4=new StringBuffer("helloworld");
        System.out.println(sb4.delete(5,10).insert(0,"你好"));
        //你好hello  从0号下标之前插入,先输出插入的
        System.out.println(sb4.delete(5,10).insert(2,"你好"));
        //he你好llo
    }
}
/*
解释:String StringBuffer  StringBulider 的区别:
1、String的内容不可修改,StringBuffer和StringBulider的内容可以修改
2、StringBuffer和StringBulider的大部分内容相似
3、StringBuffer采用同步处理,属与线程安全操作,StringBulider属于异步处理,属于线程不安全操作
 */
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!