Java基础(字符串)

1.String类是Java库中一个预定义的类。string类型是引用数据类型。

    注意:String类被final修饰:该String类不能够被继承。

               String本身就是一个字符数组,它一旦被创建,就不可以被修改。

    1)以下代码包含String类常用的一些方法:

public class Application {

    public static void main(String[] args) {
        // String 类使用final 修饰,不能被继承
        // 分配在常量区
        String t1 = "hello";

        // 分配在堆上
        String t2 = new String("hello");

        System.out.println("值比较" + t1.equals(t2));

        String t3 = "hello word hello java";

        // 判断字符串是否以XXX开始
        System.out.println(t3.startsWith("hello"));

        // 判断字符串是否以XX结尾
        System.out.println(t3.endsWith("java"));

        // 清楚字符串前后的空白字符(开头和结尾的,中间的处理不掉)
        String t4 = "           sdf   sdf  sdss    ss                 ";
        System.out.println(t4.trim());

        // 替换字符串中的指定字符
        System.out.println(t4.replace(" ", "1"));
        // 替换成空字符串就会消除空格
        System.out.println(t4.replace(" ", ""));

        int index1 = t3.indexOf("hello");// 表示首次出现的位置
        int index2 = t3.indexOf("Java");// -1 表示不存在
        int index3 = t3.indexOf("hadoop");
        int index4 = t3.lastIndexOf("hello");// 最近出现的位置

        System.out.println(index1 + " " + index2 + " " + index3 + " " + index4);

        // 字符串截取
        String t3SubString1 = t3.substring(5);// 从5 到最后
        String t3SubString2 = t3.substring(6, 10);// 从6到10,不包含10
        String t3SubString3 = t3.substring(6, 16);

        System.out.println(t3SubString1);
        System.out.println(t3SubString2);
        System.out.println(t3SubString3);

        // 字符串和char[] 的相互转换
        char[] t3Chars = t3.toCharArray();

        // 获取字符串中的每一个字符
        for (char c : t3Chars) {
            System.out.print(c + " ");
        }

        // char[]转 String
        char[] t5Chars = new char[] { 'z', 'h', 'i', 'y', 'o', 'u' };

        String t5 = new String(t5Chars);
        System.out.println("\n" + t5);

        // 按照指定字符,拆分字符串
        // String[] t3Arrays = t3.split(" ");//按照空格拆分
        String[] t3Arrays = t3.split("hello");// 按照hello拆分

        for (String s : t3Arrays) {
            System.out.println(s);
        }

        // 字符串拼接
        // 使用+拼接,不推荐,每加一次都会创建一个新的字符串
        // 比较消耗内存
        String t6 = t3 + t4 + t5;

        // 推荐使用 StringBuffer 或者 StringBuilder,使用append的方法拼接的
        StringBuffer stringBuffer = new StringBuffer();

        stringBuffer.append(t3);
        stringBuffer.append(t4);
        stringBuffer.append(t5);

        System.out.println(stringBuffer);

        String t7 = stringBuffer.toString();

        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append(t3);
        stringBuilder.append(t4);
        stringBuilder.append(t5);

        System.out.println(stringBuilder);

        String t8 = stringBuilder.toString();
        // StringBulder 相对较快,线程不安全
        // stringBuffer 相对较慢,线程安全       

        //判断一个字符串是否对称(回文)
        //上海自来水来自海上
        System.out.println(isSymmetrical("上海自来水来自海上"));
        System.out.println(isSymmetrical("上海自来水来自于海上"));


        //计算 t11在 t10 中出现了多少次
        String t10 = "ABBABABAB";
        String t11 = "BA";
        System.out.println(timeOf(t10,t11));
        }

    /**
     * 判断字符串是否对称
     * @param str 需要判断的字符串
     * @return 对称返回 true ,否则返回false
     */
    public static boolean isSymmetrical(String str) {

        //1、定义变量 表示判断结果
        boolean flag = true;//表示对称

        //2、String 转 char[]
        char[] strChars = str.toCharArray();

        //2、首位比较 length / 2 次
        for(int i = 0;i < strChars.length / 2;i ++){
            char a = strChars[i];//整数第i个字符
            char b = strChars[strChars.length - 1 - i];//倒数第i个字符

            //4、比较a 和 b,如果相同下一组,如果不想沟通循环返回 false
            if(a != b) {
                flag = false;//总覅出家门你滴哦车门
                break;
            }
        }   
        return flag;//5、返回判断结果
    }

    /**
     * target 在 source 中出现了多少次
     * @param source ABBABABAB
     * @param target BA
     * @return 出现的次数,如果没有返回 0
     */
    public static int timeOf(String source,String target) {

        int time = 0;//出现次数
        int index = -1;//target的索引

        while((index = source.indexOf(target)) != -1) {

            //只要 source 包含 target 就继续循环,判断后续内容是否包含 target

            time++;//出现次数+1

            //截取出剩余的内容,起始位置 = index + 长度
            source = source.substring(index + target.length());
        }

        return time;//返回的次数
    }
}

2.StringBuilder StringBuffer

      1)与String类的区别:

          a)String对象一旦被创建就不可以被修改,若要修改的话,要创建新的字符串对象

          b)可以给一个 StringBuilder 或 StringBuffer中添加插入或追加新的内容

      2)使用append()进行字符串连接,代码如下:

// 推荐使用 StringBuffer 或者 StringBuilder,使用append的方法拼接的
        StringBuffer stringBuffer = new StringBuffer();

        stringBuffer.append(t3);
        stringBuffer.append(t4);
        stringBuffer.append(t5);

        System.out.println(stringBuffer);

        String t7 = stringBuffer.toString();

        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append(t3);
        stringBuilder.append(t4);
        stringBuilder.append(t5);

        System.out.println(stringBuilder);

        String t8 = stringBuilder.toString();
        // StringBulder 相对较快,线程不安全
        // stringBuffer 相对较慢,线程安全       

      3)StringBuilder的一些修改字符串的方法:

          

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值