Java核心技术——基本程序设计语法3

基本程序设计语法

字符串

标准Java类库中提供了一个预定义类——String。每个用双括号括起来的字符串都是String类的一个实例。

String e = "";// an empty string
String greeting = "Hello";  
  1. 子串
    • String类的substring方法可以从一个较大的字符串中提取一个子串。
      String greeting = "Hello";
      String s = greeting.substring(0,3);//输出“Hel”组成的字符串
      
    • substring方法的第二个参数和Python中截取字符串类似,到第二个参数位置截止但不包含第二个参数的所指示的字符(突然想起去心邻域^ V ^)
    • 这样的工作方式便于计算字符串的长度,即参数2-参数1所得即是子串长度
  2. 拼接
    • 与绝大多数程序设计语言一样,Java允许使用 + 连接(拼接)两个字符串
    String expletive = "Expletive";
    String PG13 = "deleted";
    String message = expletive + PG13;// message = Expletivedeleted 中间没有空格,+ 号按照给定的次序将两个字符串拼接起来
    
    • 当讲一个字符串与另一个非字符串的值进行拼接时,后者被转换成字符串
    int age = 13;
    String rating= "PG"+ age;// rating= PG13
    System.out.println("The answer is "+answer);//字符串拼接特性常用在输出语句中
    
    • 如果需要把多个字符串放在一起,用一个定界符分隔,可使用静态join方法
    String all = String.join("/","S","M","L","XL");// all is the string "S / M / L / XL"
    
  3. 不可变字符串
    • String 类没有提供用于修改字符串的方法,如果修改字符串只能替换修改字符串
      greeting = greeting.substring(0,3)+p!;// greeting = "Help!"
      
    • 由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串,不可变字符串优点:编译器可以让字符串共享。
    • 可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量, 原始字符串与复制的字符串共享相同的字符。总而言之,Java 的设计者认为共享带来的高效率远远胜过于提取、 拼接字符串所带来的低效率。查看一下程序会发现:很少需要修改字符串, 而是往往需要对字符串进行比较
    • Java并不是字符型数组,大致类似于char* 指针,将 greeting 赋予另外一个值时,原始字符串放置在堆中,Java将自动地进行垃圾回收。如果一块内存不再使用,系统最终会将其回收。
  4. 检测字符串是否相等
    • 使用 equals 方法检测两个字符串是否相等
    s.equals(t);// 如果s与t相等则返回true,否则,返回false
    "Hello".equals(greeting);// 除使用字符串变量也可使用字符串的字面量进行比较
    "Hello".equalsIgnoreCase("hello");// 检测两个字符串是否相等,且不区分大小写
    
    • 一定不要使用=运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串是否放置在同一个位置上。当然, 如果字符串放置在同一个位置上, 它们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
    • 如果虚拟机始终将相同的字符串共享, 就可以使用=运算符检测是否相等。但实际上只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的。因此,千万不要使甩== 运算符测试字符串的相等性, 以免在程序中出现糟糕的 bug。
  5. 空串与Null串
    • 空串 “” 是长度为0的字符串,空串是一个Java对象,有自己的串长度(0)和内容(空)。不过,String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联
    if(str.length()==0)//检查一个字符串是否为空
    if(str.equals(""))//检查一个字符串是否为空
    if(str==null)检查一个字符串是否为null
    if(str != null && str.length() != 0)// 检查一个字符串既不是null也不是空串,首次检查是否为空串避免在空串上调用方法出错
    
  6. 码点与代码单元
    • Java 字符串由 char 值序列组成。,char 数据类型是一个采用 UTF-16 编码表示 Unicode 码点的代码单元。大多数的常用 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。
    • length 方法将返回采用 UTF-16 编码表示的给定字符串所需要的代码单元数量。
    // 给定字符串所需要的代码单元数量
    String greeting = "Hello";
    int n = greeting.length();// is 5
    // 实际长度,即码点数量
    int cpCount = greeting.codePointCount(0,greeting.length());
    // 返回特定位置 n 的代码单元,n 介于0 ~ s.length()-1之间,Java 对字符串中的代码单元和码点从 0 开始计数
    char first = greeting.charAt(0)// first is 'H'
    char last = greeting.charAt(4)// last is 'o'
    //第i个码点
    int index = greeting.offsetByCodePoints(0,i);
    int cp = greeting.codePointAt(index);
    
    • 遍历一个字符串,并且依次查看每一个码点,使用codePoints方法,生成一个 int 值得“流”,每一个 int 值对应一个码点。可以将它转换成一个数组,再完成遍历
    int[] codePoints = str.codePoints().toArray();
    
    • 将一个码点数组转换成一个字符串,可以使用构造函数
    String str = new String(codePoints, 0, codePoints.length);
    
  7. 构建字符串
    • 有些时候, 需要由较短的字符串构建字符串, 例如, 按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串, 都会构建一个新的 String 对象,既耗时, 又浪费空间。使用 StringBuildeir 类就可以避免这个问题的发生。
    • 如果需要用许多小段的字符串构建一个字符串, 那么应该按照下列步骤进行。 首先, 构建一个空的字符串构建器
    StringBuilder builder = new StringBuilder();
    // 当每次需要添加一部分内容时,调用append方法
    builder.append(ch)// append a single character
    builder.append(str)//  append a string
    //在需要构建字符串时就凋用 toString 方法, 将可以得到一个 String 对象, 其中包含了构建器中的字符序列。
    String comletedString = builder.toString();
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值