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)的更多相关文章

  1. Java笔记13:统计文件中每个字符出现的次数

    一.代码实现 import java.io.*; import java.util.*; /** 功能:统计文件中每个字符出现的次数 思路: 1.定义字符读取(缓冲)流 2.循环读取文件里的字符,用一 ...

  2. java笔记13之成员变量与局部变量

    成员变量和局部变量的区别 1在类中的位置不同 局部变量:类的方法体内 成员变量:类的方法之外 2内存的不同位置 局部变量:在栈内存中 成员位置:在堆内存 3生命周期不同 局部变量:随着方法的调用而存在 ...

  3. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  4. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  5. 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理

    · 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...

  6. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  7. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  8. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  9. Java笔记(二十六)……IO流上 字节流与字符流

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

随机推荐

  1. Hide JSP error icons in Eclipse

    down voteaccepted Can can either configure this at workspace level or overwrite at web project level ...

  2. nginx实现本地图片生成缩略图

    nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...

  3. could not insert new action connection could not find any information for the class named

    玩代码的时候遇到一问题,用的 storyboard 的时候分页不能自动获取到类,Automatic 里是空的,然后自动选到该类下的时候控件貌似可以拖过去,但是当 cennect 的时候会报错:“cou ...

  4. 开放封闭原则(Open Closed Principle)

    在面向对象的设计中有很多流行的思想,比如说 "所有的成员变量都应该设置为私有(Private)","要避免使用全局变量(Global Variables)",& ...

  5. Knockout.js随手记(5)

    以列表方式呈现数据  处理以数组形式储存的多条数据,要先认识foreach.在ViewModel定义一个JavaScript Array或是ko.observableArray() (observab ...

  6. 【转】C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  7. HDU 1512 Monkey King ——左偏树

    [题目分析] 也是堆+并查集. 比起BZOJ 1455 来说,只是合并的方式麻烦了一点. WA了一天才看到是多组数据. 盲人OI (- ̄▽ ̄)- Best OI. 代码自带大常数,比启发式合并都慢 [ ...

  8. 编译原理-词法分析04-NFA & 代码实现

    编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...

  9. 【转】iOS学习之容易造成循环引用的三种场景

    ARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露.导致iOS对象无法按预期释放的一个无形杀手是——循环引用.循环引用可以简单理解为A引用了B,而B又引用了A,双方都同 ...

  10. Bungee Jumping[HDU1155]

    Bungee JumpingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...