Thinking in Java——笔记(13)
Strings
Immutable Strings
- Objects of the String class are immutable.
- Every method in the class that appears to modify a String actually creates and returns a brand new String object containing the modification.
- To the reader of the code, an argument usually looks like a piece of information provided to the method, not something to be modified.
Overloading ‘+’ vs. StringBuilder
- Because a String is read-only, there’s no possibility that one reference will change something that will affect the other references.
- There was no mention of StringBuilder in the source code, but the compiler decided to use it anyway, because it is much more efficient.
- (Using overloading) you’re going to get a new StringBuilder object every time you pass through the loop.
- If looping is involved, you should explicitly use a StringBuilder in your toString( ).
- Prior to Java SE5, Java used StringBuffer, which ensured thread safety and so was significantly more expensive.
Unintended recursion
- If you really do want to print the address of the object, the solution is to call the Object toString( ) method.
Operations on Strings
- Every String method carefully returns a new String object when it’s necessary to change the contents.
- If the contents don’t need changing, the method will just return a reference to the original String.
Formatting output
printf()
- format specifier: in addition to telling where to insert the value, they also tell what kind of variable is to be inserted and how to format it.
System.out.format()
- Java SE5 introduced the format( ) method, available to PrintStream or PrintWriter objects , which includes System.out.
- The format( ) method is modeled after C’s printf( ).
- format( ) and printf( ) are equivalent.
The Formatter class
- You can think of Formatter as a translator that converts your format string and data into the desired result.
- The most useful are PrintStreams, OutputStreams, and Files.
Format specifiers
- Specifying a width to control the minimum size of a field.
- precision is used to specify a maximum.
Formatter conversions
- The ‘b’ conversion works for each variable above. Although it’s valid for any argument type, it might not behave as you’d expect.
- For any other argument, as long as the argument type is not null the result is always true.
String.format()
- String.format( ) is a static method which takes all the same arguments as Formatter’s format( ) but returns a String.
Regular expressions
- They allow you to specify, programmatically, complex patterns of text that can be discovered in an input string.
- Although the syntax of regular expressions can be intimidating at first, they provide a compact and dynamic language that can be employed to solve all sorts of string processing, matching and selection, editing, and verification problems in a completely general way.
Basics
- In Java, '\' means "I’m inserting a regular expression backslash, so that the following character has special meaning."
- The simplest way to use regular expressions is to use the functionality built into the String class.
- A regular expression doesn’t have to contain special characters.
- The non-String regular expressions have more powerful replacement tools.
- Non-String regular expressions are also significantly more efficient if you need to use the regular expression more than once.
Creating regular expressions
- Once you start writing regular expressions, you’ll often use your code as a reference when writing new regular expressions.
Quantifiers
- Greedy: A greedy expression finds as many possible matches for the pattern as possible.
- Reluctant: this quantifier matches the minimum number of characters necessary to satisfy the pattern.
- Possessive: it generates many states so that it can backtrack if the match fails.
Pattern and Matcher
- In general, you’ll compile regular expression objects rather than using the fairly limited String utilities.
- A Pattern object represents the compiled version of a regular expression.
- You can use the matcher( ) method and the input string to produce a Matcher object from the compiled Pattern object.
- The Matcher object is then used to access the results, using methods to evaluate the success or failure of different types of matches.
find()
- Matcher.find( ) can be used to discover multiple pattern matches in the CharSequence to which it is applied.
- find( ) can be given an integer argument that tells it the character position for the beginning of the search.
Groups
- Groups are regular expressions set off by parentheses that can be called up later with their group number.
start() and end()
- Following a successful matching operation, start( ) returns the start index of the previous match, and end( ) returns the index of the last character matched, plus one.
- While matches( ) only succeeds if the entire input matches the regular expression, lookingAt( ) succeeds if only the first part of the input matches.
Scanning input
- The usual solution is to read in a line of text, tokenize it, and then use the various parse methods of Integer, Double, etc., to parse the data.
- With Scanner, the input, tokenizing, and parsing are all ensconced in various different kinds of "next" methods.
Scanner delimiters
- You can also specify your own delimiter pattern in the form of a regular expression.
Scanning with regular expressions
- You can also scan for your own user- defined patterns, which is helpful when scanning more complex data.
- The pattern is matched against the next input token only, so if your pattern contains a delimiter it will never be matched.
Thinking in Java——笔记(13)的更多相关文章
- Java笔记13:统计文件中每个字符出现的次数
一.代码实现 import java.io.*; import java.util.*; /** 功能:统计文件中每个字符出现的次数 思路: 1.定义字符读取(缓冲)流 2.循环读取文件里的字符,用一 ...
- java笔记13之成员变量与局部变量
成员变量和局部变量的区别 1在类中的位置不同 局部变量:类的方法体内 成员变量:类的方法之外 2内存的不同位置 局部变量:在栈内存中 成员位置:在堆内存 3生命周期不同 局部变量:随着方法的调用而存在 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...
- java笔记00-目录
--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
随机推荐
- jython安装与配置
安装jython 0. 计算机中要安装jdk 1. 在官网www.jython.org上找到下载页面,然后下载jython-installe 2. 在cmd.exe中运行java -jar jytho ...
- C#实现K-MEDOIDS聚类算法
1.任意选取K个对象作为初始聚类中心(O1,O2,…Oi…Ok). 2)将余下的对象分到各个类中去(该对象与哪一个聚类中心最近就被分配到哪一个聚类簇中): 3)对于每个类(Oi)中,顺序选取一个Or, ...
- SQL语句汇总
1.查询出来数据保留小数点2位,并且0.01时候,不会展示为.01. select to_char(0.1,'fm9999999990.00') from dual; 2.wm_concat ...
- 【Java EE 学习 25 下】【网上图书商城js小技术点总结】
1.日历控件的使用 日历控件源代码: /** * add auto hide when mouse moveout * * @version 1.0.1 * @date 2010-11-23 * @a ...
- Requests库练习
预备知识 字符串方法 用途 string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 ...
- Hibernate Open Session In View模式【转】
来源:http://www.yybean.com/opensessioninviewfilter-role-and-configuration 一.作用 Spring为我们解决Hibernate的Se ...
- SQL注入攻防入门详解(2)
SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...
- 巴特沃斯(Butterworth)滤波器 (1)
下面深入浅出讲一下Butterworth原理及其代码编写. 1. 首先考虑一个归一化的低通滤波器(截止频率是1),其幅度公式如下: 当n->∞时,得到一个理想的低通滤波反馈: ω<1时,增 ...
- Kinect的那些事儿
Kinect结合Unity3d跑酷游戏体感Demo 今天收拾东西,在柜子的翻出了一台崭新的Kinect,说起来真是惭愧,大学毕业那会儿,慈老师(和名字一位慈祥的好老师,也是我的毕业设计指导老师)赞 助 ...
- python集合
集合的创建:set()和frozenset() 区别:frozenset()创建不可变的集合,一旦创建其元素不可改变:而set()创建的集合中的元素可以通过一定的方法进行改变. >>> ...