为了账号安全,请及时绑定邮箱和手机立即绑定

Java技术之字符串

标签:
Java

Java技术之字符串

Java字符串就是Unicode字符序列

子串

public class Note {
    public static void main(String[] args) {
//substring方法可以从一个较大的字符串提取出一个子串
        String greeting = "Hello";
        System.out.println(greeting.substring(0, 3));
//输出结果
//Hel
//substring方法第二个参数是指不包含的位置,也就是,0,1,2但不包括3,所以输出结果是"Hel"
//换个方式表达就是数学中的前开后闭区间 即 [a,b)
    }
}

拼接

public class Note {
    public static void main(String[] args) {
//可以使用"+"拼接字符串
        String expletive = "Expletive";
        String PC13 = "deleted";
        String message = expletive + PC13;
        System.out.println(message);
//输出结果
//Expletivedeleted
//任何一个Java对象都可以转换为字符串
        int age = 13;
        String rating = "PC" + age;
        System.out.println(rating);
//输出结果
//PC13
//可以使用定界符,注意jdk1.8版本以上支持String.join
        String all = String.join(" / ", "S", "M", "L", "XL"); // all is the string "S / H / L / XL"
        System.out.println(all);
//输出结果
//S / M / L / XL
    }
}

不可变字符串

public class Note {
    public static void main(String[] args) {
//字符串的内容无法修改,但能重新赋值
        String greeting = "Hello";//定义后,值无法修改,可以截取重新赋值,也可以直接重新赋值//
        greeting = "Howdy";//Java回收机制会垃圾回收掉之前的值,不必担心内存遗漏
        System.out.println(greeting);
//输出结果
//Howdy
    }
}

检测字符串是否相等

public class Note {
    public static void main(String[] args) {
//equals是常用检测字符串是否一致,而==会判断是否同一位置上,尽量不要使用这个去判断,通过+等都会影响位置,避免间歇性错误
        String hello = "Hello";
        String howdy = "Howdy";
        String hello2 = "hello";
        System.out.println(hello.equals(howdy));
        System.out.println(hello.equals(hello2));//值是否相等,但区分大小写
        System.out.println(hello.equalsIgnoreCase(hello2));//值是否相等,但不区分大小写
//输出结果
//false
//false
//true
    }
}

空串与NUll串

public class Note {
    public static void main(String[] args) {
//空串是长度为0的字符串,即 ""  是一个Java对象,长度为0和内容为空
        String hello = "Hello";
        String hello2 = "";
        System.out.println(hello.length() == 0);//值是否是空串
        System.out.println(hello2.length() == 0);//值是否是空串
//输出结果
//false
//true
//null表名没有任何对象与该变量关联
        hello = "Hello";
        hello2 = "";
        System.out.println(hello == null);//值是否是null
        System.out.println(hello.length() != 0 && hello != null);//值不是空串也不是null
//输出结果
//false
//true
    }
}

码点与代码单元

public class Note {
    public static void main(String[] args) {
//Java字符串由char值序列组成
//char数据类型由UTF-16编码表示Unicode的代码单元
//大多数的常用Unicode字符使用一个代码单元就可以表示
//辅助字符需要一对代码单元表示
//length方法将放回采用UTF-16编码表示的给定字符串所需要的代码单元数量
        String greeting = "Hello";
        int n = greeting.length();
        System.out.println(n);
//输出结果
//5
//码点数量
        int cpCount = greeting.codePointCount(0, greeting.length());
        System.out.println(cpCount);
//输出结果
//5
//charAt(n)将返回位置n的代码单元,n介于0~length()-1之间
        char first = greeting.charAt(0);
        char last = greeting.charAt(4);
        System.out.println(first);
        System.out.println(last);
//输出结果
//H
//o
//得到第i个码点
        int index = greeting.offsetByCodePoints(0, 3);
        int cp = greeting.codePointAt(index);
        System.out.println(index);
        System.out.println(cp);
//输出结果
//3
//108
//代码单元和码点从0开始计数
        String sentence = "? is set of octonions";
        char ch = sentence.charAt(1);
        System.out.println(ch);
//返回结果
//? 返回了?的第二个代码单元,而不是空格
//为了避免上面的问题,应当如下遍历字符串,从而得到?的16位表示为0x1d546
        for (int i = 0; i < sentence.length(); i++) {
            int codePointAt = sentence.codePointAt(i);
            if (Character.isSupplementaryCodePoint(codePointAt)) {
                System.out.println(Integer.toHexString(codePointAt));
            } else {
                System.out.println(Integer.toHexString(codePointAt));
            }
        }
//输出结果
//        1d546
//        dd46
//        20
//        69
//        73
//        20
//        73
//        65
//        74
//        20
//        6f
//        66
//        20
//        6f
//        63
//        74
//        6f
//        6e
//        69
//        6f
//        6e
//        73
//十六位转字符串,即可知𝕆是辅助字符
        char[] chars = Character.toChars(0x1d546);
        String str = new String(chars,0,chars.length);
        System.out.println(str);
//输出结果
//𝕆
//以下codePoints方法返回一个流也可以遍历,需要jdk1.8及其以上支持
        int[] stream = sentence.codePoints().toArray();
        for (int s : stream) {
            System.out.println(Integer.toHexString(s));
        }
    }
}

构建字符串

public class Note {
    public static void main(String[] args) {
//使用构建的方式更加方便和灵活
        StringBuilder builder = new StringBuilder();
//当每次需要添加一部分内容时, 就调用 append 方法。
        builder.append("1"); // appends a single character
        builder.append("23"); // appends a string
        System.out.println(builder.toString());
//输出结果
//123
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消