《Java编程思想》(笔记13)-- 字符串

是决定花一段连续的时间把《Java编程思想》看一遍,看书怎么能不做笔记呢,明明知道自己有些地方看完肯定会忘掉的,所以想把每章的笔记重点放在博客上,与大家共享!

第十三章 字符串
发现这一章讲了好多正则表达式,之前学网络爬虫的时候就不喜欢这个,现在又来。手动滑稽

1.基础

String类是不可变的,final的。看似修改了String的方法,实际上都是创建了一个指向对象的引用而已。
创建String对象及引用,可以直接new出来,也可以直接用“ ”创建这个字符串。
这两种方法存在一些区别:

  • new出来的,JVM不会将其存储在字符串池中,当然可以用intern()将创建的String对象存储到字符串池中,值如果已经存在就返回引用。
  • 双引号创建一个字符串时,JVM会先在字符串中查找是否有相同的值存在,要是有,就返回一个引用,要是没有,就创建一个新的存储在字符串池中。
2.面试必备:String StringBuilder StringBuffer

书上讲 StringBuffer很少,补充一下吧。
刚开始接触的时候,不禁提问:这三个类这么相似,存在的目的是什么?肯定是有用的,毕竟都是大佬开发的类库。
在字符串拼接字段速度上:StringBuilder > StringBuffer > String

  • StringBuilder是开发最晚的,要不是相对最好的,我都不信 。其用法与StringBuffer完全一致,可是线程不安全,在单线程中最好用,最快。
  • StringBuffer是线程安全的,同时维护线程的同步就需要花费额外的时间。对其操作是直接操作对象引用。
  • String是不可变的,因此每次都对其操作改变其变量值,其实就是生成一个新对象,然后将变量引用指向新对象,看着就觉得速度慢。
    =======》 想要深入了解,请看源码。
3.正则表达式
  • 语法:菜鸟教程
  • java.util.regex
    • Pattern:Pattern对象是一个正则表达式的编译表示,创建一个Pattern对象要调用静态方法compile()。
    • Matcher:Matcher对象是对输入字符串进行解释和匹配操作的引擎。创建Matcher对象也是需要调用静态方法matcher()。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringDisplay {
    public static void main(String[] args) {
       if (args.length < 2){
            System.out.println("Usage:\njava TestRegularExpression " +
                    "characterSequence regularException+");
            System.exit(0);
        }
        System.out.println("Input: \"" + args[0] + "\"");
        for (String arg : args){
            System.out.println("Regular expression: \"" + arg + "\"");
            Pattern pattern = Pattern.compile(arg);
            Matcher matcher = pattern.matcher(args[0]);
            while (matcher.find()){
                System.out.println("Match \"" + matcher.group() + "\" at position " +
                        matcher.start() + "-" + (matcher.end() -1));
            }
        }
    }
}

(1)索引方法(精确表明输入字符串中在哪能找到匹配)

  • public int start() 返回以前匹配的初始索引
  • public int end() 返回最后匹配字符之后的偏移量。
    (2)研究方法(用来检查输入字符串并返回一个布尔值,表示是否找到该模式)
  • public boolean lookingAt()** 尝试将从区域开头开始的输入序列与该模式匹配。
  • public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
  • public boolean matches() 尝试将整个区域与模式匹配。
    (3)替换方法(替换输入字符串里文本的方法)
  • public String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。
  • public String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。

**书上是这么说的,哈哈。作者也是很直接了。

我完全不理解设计师怎么会想到这么个方法名。不过可以相信,取出如此不直观的名字的家伙还在Sun工作。而且,不复查代码设计的政策显然还存在Sun中。

祝进步

猜你喜欢

转载自blog.csdn.net/zhaohancsdn/article/details/88871622
今日推荐