Java 字符串

String

String概述

String类在java.lang包下,所以使用的时候不需要导包

String类代表字符串,Java程序中所有的双引号字符串都是String类的对象。

字符串的特点:

  • 字符串不可变,它们的值在创建后不能被更改
  • 虽然String的值不可变的,但是可以被共享的
  • 字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])

String的构造方法

public class StringDemo1{
    //推荐使用直接赋值来创建字符串对象
    public static void main(String[] args){
        //public String():创建一个空白字符串对象,不含有任何内容
        String s1=new String();
        System.out.println("s1:"+s1);//输出:
        //public String (char[] chs):根据字符串数组的内容,来创建字符串对象
        char[] chs={'a','b','c'};
        String s2=new String(chs);
        System.out.println("s2"+s2);//输出:abc
        //public String(byte bys):根据字符数组中的内容,来创建字符串对象
        byte[] bys={97,98,99};
        String s3=new String(bys);
        System.out.println("s3"+s3);//输出:abc
        //数字转化为字符数组97=a,98=b,99=c
        
        //String s="abc",直接赋值的方式来创建字符串对象,内容就是abc
        String s4="abc";
        System.out.println("s4"+s4);
    }
}

String对象的特点

1.通过new创建的字符对象,每一次new就会申请一个内存空间,虽然内容相同,但是地址值不同。

char[] chs={'a','b','c'};
String s1=new String(chs);
String s2=new String(chs);

2.以“”方式给出的字符串对象,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,jvm都只会建一个String对象,并在字符池中维护。

String s3="abc";
String s4="abc"
    //上述代码针对第一行代码,jvm会建立一个String对象放到字符串池中,并给s3参考,第二行代码直接参考字符串池中的String对象,换句话说他们本质是同一个东西。

字符串的比较

使用**==**作比较

  • 基本类型:比较的是数据值是否相同
  • 引用类型:比较的是地址值是否相同

字符串是对象,他比较内容是否相同,是通过一个方法来实现的,这个方法叫:equal()

  • public boolean equals(Object anObject):将字符串和指定对象进行比较。
public class StringDemo02{
    public Static void main(String[] args){
        //构造方法的方式得到对象
        char[] chs={'a','b','c'};
        String s1=new String(chs);
        String s2=new String(chs);
        
        //使用直接赋值的方式得到对象
        String s3="abc";
        String s4="abc";
        
        //比较字符串对象地址是否相同
        System.out.println(s1==s2);//false
        System.out.println(s2==s3);//false
        System.out.println(s3==s4);//true
        System.out.println("----------");
        
        //比较字符串内容是否相同
        System.out.println(s1.equals(s2));//true
        System.out.println(s2.equals(s3));//true
        System.out.println(s3.equals(s4));//true
    }
}

String案例

import java.util.Scanner;

public class StringDemo {
    /**
     * 需求:已知用户名和密码,请实用程序实现模拟用户登陆。总共给三次机会,
     * 登陆成功之后,给出相应的提示。
     * 思路:1)已知用户名和密码,定义两个字符串表示
     * 2)键盘录入要登陆的用户名和密码,用Scaaner实现
     * 3)拿键盘录入的用户名、密码和已知的用户名和密码去比较,给出相应的提示,字符串内容的比较使用equal()方法实现。
     */
    public static void main(String[] args) {
        String login1=new String ( "qingzhu" );
        String password=new String ( "12345" );
        loginSystem(login1,password);

    }
    public static void loginSystem(String s1, String s2){
        Scanner scanner=new Scanner (System.in);

        while (true){
            System.out.println ("请输入账户名:" );
            String login2=scanner.next ();
            System.out.println ("请输入密码:" );
            String paw=scanner.next ();

            if(s1.equals (login2)){
                if ( s2.equals (paw)!=true){
                    System.out.println ("你输入的密码有误,请重新输入" );
                }else{
                    System.out.println ("恭喜登陆成功" );
                    break;
                }
            }else{
                System.out.println ("你输入的账户有误" );
            }
        }
    }
}

import java.util.Scanner;

public class StringDemoThree {
    /**
     * 需求:键盘录入一个字符串,实用程序实现在控制台遍历该字符串
     */
    public static void main(String[] args) {
        Scanner scanner=new Scanner (System.in);
        System.out.println ("请输入一个字符串:" );
        String s1=scanner.nextLine ();
        for (int i = 0; i < s1.length (); i++) {
            System.out.print( s1.charAt (i));
        }
    }
}
import java.util.Scanner;

public class StringDemoFour {
    /**
     * 需求:键盘录入一个字符串,统计中字符传中大写字符,小写字符数字字符出现的次数(不考录其他字符)
     * 思路:1)键盘录入一个字符串,使用Scanner实现
     * 2)统计三种类型的字符个数,使用不同的变量计数
     */
    public static void main(String[] args) {
        Scanner s=new Scanner (System.in);
        int q=0,x=0,y=0;
        System.out.println ("请输入一个字符串:" );
        String s1=s.nextLine ();
        for (int i = 0; i < s1.length (); i++) {
            if('A'<=s1.charAt (i) && s1.charAt (i)<='Z'){
                q++;
            }else if('a'<=s1.charAt (i) && s1.charAt (i)<='z'){
                x++;
            }else if('0'<=s1.charAt (i) && s1.charAt(i)<='9'){
                y++;
            }
        }
        System.out.println ("该字符串中有"+q+"个小写字符,"+x+"个大写字符,"+y+"个数字" );
    }
}
import java.util.Scanner;

public class StringDemoFive {
    /**
     * 需求:定义一个方法,将int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法
     * 并在控制台输出结果。例如,数组为int[] arr={1,2,3},执行方法后的输入结果为[1,2,3]
     * 思路:1)定义一个int类型的数组,使用静态初始化完成数组的初始化
     *      2)定义方法,将int数组中的数据按照指定格式拼接成字符串返回。返回值类型为String
     *      3)在方法中遍历数组,按照要求进行拼接
     */
    public static void main(String[] args) {
        int[] arr={1,3,4,5};
        pingjie (arr);
        System.out.println (arrayToString (arr) );
    }
    public static void pingjie(int[] arr){
        System.out.print ("[" );
        for (int i = 0; i < arr.length; i++) {
            if(i== arr.length-1){
                System.out.print (arr[i]+"]" );
            }else {
                System.out.print (arr[i] +",");
            }
        }
    }
    public static String arrayToString(int [] arr){
        String s="";
        s+="[";
        for (int j = 0; j < arr.length; j++) {
            if(j==arr.length-1){
                s+=arr[j];
            }else{
                s+=arr[j];
                s+=",";
            }
        }
        s+="]";
        return s;
    }
}

StringBuffer

string和stringBuffer的区别:

  • stringBuffer中的对象是可以变化的,而string是不可以变的。
  • stringbuffer是字符缓冲区,而stringbuilder是可变序列;两者都有appeand方法,该方法可以将各种类型的字符串添加到序列当中。

ArrayList

​ ArrayList提供一种存储空间可变的存储模型,存储的数据容量可以发生改变的。

ArrayList:可以调整大小的数组实现;是一种特殊的数据类型,泛型;后续在使用的时候引用数据类型替换掉即可。

方法名说明
pulic ArrayList()创建一个空的集合对象
public boolean add(E e)将在指定的元素追加到此集合的末尾
public void add(int index,E element)在集合的指定位置插入指定的元素
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index)使用指定的元素替换此列表中指定位置的元素。
public E get(int index)返回指定位置的元素
public int size()返回集合中的元素个数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值