- 浏览: 185681 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (137)
- spring (8)
- java基础 (6)
- jsp&Servlet (1)
- java面试笔试 (3)
- 日常记录 (7)
- 前台开发 (11)
- OOA/OOD/OOP (4)
- thinking in java (17)
- Linux (8)
- Maven (4)
- spring_mvc (7)
- Spring MVC Tutorial (1)
- w3c school (4)
- 美工 (4)
- DDD (3)
- spring security (8)
- spring doc translation (2)
- helloworld (5)
- javascript (4)
- html&css (14)
- java并发 (2)
- zookeeper (1)
- redis (2)
- php (0)
- objective-c (1)
- laravel4 (0)
最新评论
-
joyceKemi:
2013-6-26 13:00:48 org.apache.c ...
spring_mvc(一)环境搭建 -
yunzhu:
收藏的文章很好,谢谢分享
http&servlet -
javaeyegood:
spring_mvc(四)Message Converters
不可变String
当把q传给upcase方法时,实际传递的是引用的一个拷贝。其实,每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
回到upcase定义,传入其中的引用有了名字s,只有在upcase运行的时候,局部引用s才存在。一旦upcase结束,s就消失了。当然了,upcase的返回值,其实只是最终结果的引用和s不是一个引用。这足以说明,upcase返回的引用已经指向了一个新的对象,而原本的q则还在原地。
难道你真的希望改变其参数吗?对与一个方法而言,参数时为该方法提供信息的,而不是想让该方法改变自己的。
重载“+”与StringBuilder
String s = “abf” + “sadf” + “da” + 47;
调用javap –c Concatenation
看输出代码,我们可以得到:
编译器自动引入了java.lang.StringBuilder类。虽然我们在源代码中并没有使用StringBuilder类,但是编译器却自作主张地使用了它,因为它更高效。
在这个例子中,编译器创建了一个StringBuilder对象,用以构造最终的String,并为每个字符串调用一次StringBuilder的append方法,总计4次。最后调用toString生成结果。并存为s。
现在,也许你会觉得可以随意使用String对象,反正编译器会为你自动地优化性能。但是看下面两段代码:
第一个每一次循环内部都会生成一个StringBuilder对象,但是最后这个代码只有一个。如果你要在toString方法中使用循环,那么最好自己创建一个StringBuilder对象,用它来构造最终的结果。
如果你想走捷径,例如append(a + “:” + b)那编译器就会掉入陷阱,从而为你另外创建一个StringBuilder对象来处理括号内的字符串操作。
如果你拿不准该用哪种方式,随时都可以用javap来分析你的程序。
StringBuilder提供了丰富而全面的方法,包括insert replace substring甚至reverse,但是最常用的还是append和toString还有delete方法。
Stringbuilder是java SE5引入的,在这之前java用的是StringBuffer。后者是线程安全的,因此开销也会大些。
格式化输出
Formatter类
在java中,所有新的格式化功能都由java.util.Formatter类处理。可以将Formatter看作一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出:
格式化说明符
在插入数据时,如果想要控制空格与对齐,你需要更精细复杂的格式修饰符。一下是语法:
%[argument_index$][flags][width][.precision]conversion
% - 15 .5
共15位小数5位左对齐。
最常见的应用时控制一个域的最小尺寸,这可以通过指定width来实现。Formatter对象通过在必要时添加空格,来去日报一个域至少达到某个长度。在默认情况下,数据是右对齐,不过可以通过使用“-”标志来改变对齐方向。
与width相对的是precision,它用来指明最大尺寸。Width可以应用于各种类型的数据转换,并且其行为方式都一样。Precision则不然,不是所有类都可以使用,String的时候表示输出字符最大数量,而小数的时候,位数过多则舍入,少了就补零。所以无法应用于整数,如果应用则会发生异常。
Formatter转换
d 整数型 c Unicode字符
b Boolean值 s String
f 浮点数(十进制) e 浮点数(科学计数)
x整数(十六进制) h散列码(十六进制) % 字符“%”
程序中每个变量都使用了b转型,只要不是null转型都是true,即使是数字0转换结果依然是true。
String.format()
String.format()放回一个String对象。其实在String.format()内部,它也是创建一个Formatter对象,然后将你传入的参数转给该Formatter。不过,与其自己做这些事情,不如使用便捷的String.format()方法,何况这样的代码更清晰易读。
正则表示式
应用正则表达式的最简单的途径,就是利用String内建的功能。
String.split()还有一个重载的版本,它允许你限制字符串分割的次数。
String类自带的最后一个正则表达式工具是“替换”。你可以只替换正则表达式第一个匹配的子串,或是替换所有匹配的地方。
public class Immutable { public static String upcase(String s) { return s.toUpperCase(); } public static void main(String[] args) { String q = "howdy"; System.out.println(q); String qq = upcase(q); System.out.println(q); System.out.println(qq); } } Output: howdy howdy HOWDY
当把q传给upcase方法时,实际传递的是引用的一个拷贝。其实,每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
回到upcase定义,传入其中的引用有了名字s,只有在upcase运行的时候,局部引用s才存在。一旦upcase结束,s就消失了。当然了,upcase的返回值,其实只是最终结果的引用和s不是一个引用。这足以说明,upcase返回的引用已经指向了一个新的对象,而原本的q则还在原地。
难道你真的希望改变其参数吗?对与一个方法而言,参数时为该方法提供信息的,而不是想让该方法改变自己的。
重载“+”与StringBuilder
String s = “abf” + “sadf” + “da” + 47;
调用javap –c Concatenation
看输出代码,我们可以得到:
编译器自动引入了java.lang.StringBuilder类。虽然我们在源代码中并没有使用StringBuilder类,但是编译器却自作主张地使用了它,因为它更高效。
在这个例子中,编译器创建了一个StringBuilder对象,用以构造最终的String,并为每个字符串调用一次StringBuilder的append方法,总计4次。最后调用toString生成结果。并存为s。
现在,也许你会觉得可以随意使用String对象,反正编译器会为你自动地优化性能。但是看下面两段代码:
public class Immutable { public static String upcase(String[] fields) { String result; for(int i=0; i<10; i++) { result += fields[i]; } return result; } public static void main(String[] args) { StringBuilder result = new StringBuilder(); for(int i=0; i<10; i++) { result.append(fields[i]); } result.toString(); } }
第一个每一次循环内部都会生成一个StringBuilder对象,但是最后这个代码只有一个。如果你要在toString方法中使用循环,那么最好自己创建一个StringBuilder对象,用它来构造最终的结果。
如果你想走捷径,例如append(a + “:” + b)那编译器就会掉入陷阱,从而为你另外创建一个StringBuilder对象来处理括号内的字符串操作。
如果你拿不准该用哪种方式,随时都可以用javap来分析你的程序。
StringBuilder提供了丰富而全面的方法,包括insert replace substring甚至reverse,但是最常用的还是append和toString还有delete方法。
Stringbuilder是java SE5引入的,在这之前java用的是StringBuffer。后者是线程安全的,因此开销也会大些。
格式化输出
public class SimpleFormat { public static void main(String[] args) { int x = 5; double y = 5.332466; System.out.println("Row 1: [" + x + " " + y + "]"); System.out.format("Row 1: [%d %f]\n", x, y); System.out.printf("Row 1: [%d %f]\n", x, y); } } Output: Row 1: [5 5.332466] Row 1: [5 5.332466] Row 1: [5 5.332466]
Formatter类
在java中,所有新的格式化功能都由java.util.Formatter类处理。可以将Formatter看作一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出:
import java.io.PrintStream; import java.util.Formatter; public class Turtle { private String name; private Formatter f; public Turtle(String name, Formatter f) { this.name = name; this.f = f; } public void move(int x, int y) { f.format("%s the turtle is at (%d,%d)\n", name, x, y); } public static void main(String[] args) { PrintStream outAlias = System.out; Turtle tommy = new Turtle("Tommy", new Formatter(System.out)); Turtle terry = new Turtle("terry", new Formatter(outAlias)); tommy.move(0, 0); terry.move(4, 8); } } Output: Tommy the turtle is at (0,0) terry the turtle is at (4,8)
格式化说明符
在插入数据时,如果想要控制空格与对齐,你需要更精细复杂的格式修饰符。一下是语法:
%[argument_index$][flags][width][.precision]conversion
% - 15 .5
共15位小数5位左对齐。
最常见的应用时控制一个域的最小尺寸,这可以通过指定width来实现。Formatter对象通过在必要时添加空格,来去日报一个域至少达到某个长度。在默认情况下,数据是右对齐,不过可以通过使用“-”标志来改变对齐方向。
与width相对的是precision,它用来指明最大尺寸。Width可以应用于各种类型的数据转换,并且其行为方式都一样。Precision则不然,不是所有类都可以使用,String的时候表示输出字符最大数量,而小数的时候,位数过多则舍入,少了就补零。所以无法应用于整数,如果应用则会发生异常。
Formatter转换
d 整数型 c Unicode字符
b Boolean值 s String
f 浮点数(十进制) e 浮点数(科学计数)
x整数(十六进制) h散列码(十六进制) % 字符“%”
程序中每个变量都使用了b转型,只要不是null转型都是true,即使是数字0转换结果依然是true。
String.format()
String.format()放回一个String对象。其实在String.format()内部,它也是创建一个Formatter对象,然后将你传入的参数转给该Formatter。不过,与其自己做这些事情,不如使用便捷的String.format()方法,何况这样的代码更清晰易读。
正则表示式
应用正则表达式的最简单的途径,就是利用String内建的功能。
public static void main(String[] args) { System.out.println("-1234".matches("-?\\d+")); } Output: True
String.split()还有一个重载的版本,它允许你限制字符串分割的次数。
String类自带的最后一个正则表达式工具是“替换”。你可以只替换正则表达式第一个匹配的子串,或是替换所有匹配的地方。
public static void main(String[] args) { System.out.println(s.replaceFirst("f\\w+", "located")); System.out.println(s.replaceAll("shrubbery|tree|herring", "banana")); }
发表评论
-
第十四章 类型信息4.0
2011-10-14 14:47 805动态代理 Java的动态代理比代理的思想更向前迈进了一步,因 ... -
第十四章 类型信息3.0
2011-10-14 13:53 890类型转换前先做检查 迄今为止,我们已知的RTTI形式包括: ... -
第十四章 类型信息2.0
2011-10-14 13:23 917类字面常量 Java 还提供 ... -
第十四章 类型信息1.0
2011-10-14 10:02 805运行时类型信息使得你 ... -
第十二章 通过异常处理错误
2011-10-11 13:55 820异常参数 throw new NullPoi ... -
第十一章 持有对象
2011-10-11 12:05 915首先给出一个整体类图结构: 常用的容器用黑色粗线框表示,点线 ... -
第十章 内部类
2011-10-09 18:09 886如果想从外部类的非静 ... -
第九章 接口
2011-10-09 12:18 854接口 可以在interface关键字前面添加public关键 ... -
第八章 多态
2011-10-09 10:44 741方法调用绑定 将一个方法调用同一个方法主体关联起来被称作绑定 ... -
第七章 复用类
2011-10-09 10:20 878第一种方法非常直观, ... -
第六章 访问权限控制
2011-10-08 16:42 917如果将两个含有相同名称的类库以“*”形式同时引入,将会出现什么 ... -
第五章 初始化与清理
2011-10-08 14:20 865用构造器确保初始化 ... -
第四章 控制执行流程
2011-10-08 14:12 811臭名昭著的goto public class LabeledF ... -
第三章 操作符
2011-10-08 14:05 849提升 如果对基本数据类型执行算术运算或按位运算,大家会发现, ... -
第二章 一切都是对象
2011-10-07 20:23 800储存到什么地方 栈放引用,堆放对象。 基本类型的变量不用n ... -
第一章 对象导论
2011-10-07 19:42 901Alan Kay曾经总结了第一个成功的面向对象语言,Small ...
相关推荐
Java编程思想第十三章字符串.pptx
第13章主要讲解了字符串处理函数,涵盖了输入输出、复制和拼接等基本操作。以下是这些知识点的详细说明: 1. **输入和输出函数** - **putchar函数**:用于向标准输出设备(通常是显示器)打印一个字符。其函数原型...
Python程序设计董付国第二版第四章字符串与正则表达式知识点总结 1. 字符串编码:ASCII、UTF-8、UTF-16、UTF-32、GB2312、GBK、CP936、base64等,了解不同编码格式的特点和应用场景。 2. Python字符串类型:Python...
本章我们将深入探讨字符串的常见操作和使用技巧,以帮助你更好地理解和运用字符串这一重要的编程工具。 一、字符串定义与创建 字符串是由一个或多个字符组成的序列,通常用于存储文本信息。在很多编程语言中,如...
Java 字符串应用笔记 在 Java 中,字符串是最基本的数据类型之一,理解字符串的应用是 Java 开发的基础。本篇笔记将详细介绍 Java 中 equals 和 == 的区别、字符串相关的几个函数介绍、String 和 StringBuffer 的...
本章主要探讨了数组,特别是字符串以及类库的使用。 一、数组 1. 一维数组 - 定义与创建: - 方式一:先声明数组变量,再创建数组对象。如 `int a[];` 后跟 `a = new int[3];` - 方式二:同时定义并创建数组,...
值得注意的是,Python允许使用三引号('''或""")来创建多行字符串。 在字符串中,转义字符是一个重要的概念。转义字符以反斜线`\`开头,用于表示特殊功能或插入特殊字符。例如,`\n`用于插入一个换行符,`\t`插入...
C语言函数库中的第四章主要聚焦于字符串处理函数,这些函数在软件开发中扮演着重要角色,特别是对于处理文本数据时。以下是对其中一些关键函数的详细解释: 1. `atof`:此函数用于将一个字符串转换为浮点型数值。它...
在第九章的“POINTERS ON C”中,编程练习16着重于使用格式化字符串来处理数字字符。这涉及到C语言的`printf`函数,它是`stdio.h`库中的一个关键组成部分,用于向标准输出(通常是控制台)打印格式化的数据。 `...
第13章 基于thinter的GUI编程.ppt 第14章 Python的高级技术.ppt 第15章 数据库的应用.ppt 第16章 网络编程的应用.ppt 第17章 CGI程序设计.ppt 第18章 Web网站编程.ppt 第19章 经典游戏应用-开发弹球游戏.ppt 第20章 ...
"数组和字符串-练习题.pdf" 本资源摘要信息是关于数组和字符串的练习题,共15道选择题,涵盖了数组和字符串的基本概念、数组下标、数组初始化、数组元素访问、字符串数组、数组拷贝等知识点。 一、数组基本概念 *...
第3章 字符串转换 68 3.1 ToString()方法 68 3.2 把数值表示为字符串 69 3.3 把日期和时间表示为字符串 74 3.4 把其他对象表示为字符串 76 3.5 用字符串表示字符串 78 3.6 把字符串转换为其他类型 79 3.6.1 把字符串...
在编程领域,自定义字符串类(如题目中的`_String`)是一种常见的实践,它允许开发者根据特定需求扩展或修改标准库中字符串类的功能。在本案例中,我们聚焦于如何构建一个综合性的自定义字符串类,以实现与C++标准库...
"《C Primer Plus》第六版 第十一章编程练习答案" 本资源摘要信息是关于《C Primer Plus》第六版 第十一章的编程练习答案,涵盖了多个与C语言相关的知识点。下面对这些知识点进行详细的解释和分析。 1. 输入字符串...
本章主要讨论了数组、指针以及字符串的基本概念和使用方法。 数组是存储相同类型元素的集合,可以通过索引来访问每个元素。例如,数组A[10][5][15]是一个三维数组,它有10个元素,每个元素本身又是一个含有5个元素...
第1章 C++面向对象程序设计 1.1 抽象数据类型 1.2 封装 1.3 继承 1.4 指针 1.4.1 指针与数组 1.4.2 指针与复制构造函数 ...第13章 字符串匹配 附录A 计算大O 附录B 标准模板库中的算法 附录C NP完整性