`

Java 常用API的运用,效率及技巧三

    博客分类:
  • java
 
阅读更多

3String, StringBuffer

3.1 基本用法

String可以说是我们最常用的一个类, 熟练掌握它的一些基本用法是很有用的。

String是由一组字符组成的字符串, 下标由0开始。 一旦有必要改变原来的内容, 每个String方法都有返回了一个新的String对象。

Ø  char charAt(int index) 返回指定位置的字符。

Ø  int compareTo(Object o)
int compareTo(String anotherString)
与另外一个对象进行比较。

Ø  int compareToIgnoreCase(String str)  与另一个String进行比较, 不区分大小写

Ø  String concat(String str) 连接两字符串, 可以直接用+ 因为JavaString覆盖了+

Ø  static String copyValueOf(char[] data)
static String copyValueOf(char[] data, int offset, int count)
data数组转换至String

Ø  boolean endsWith(String suffix) 测试此String是否以suffix结尾。
boolean startsWith(String prefix)
测试此String是否以prefix开头。

Ø  boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)
比较两字符串的值。 不相等则返回false

Ø  byte[] getBytes() 根据缺省的字符编码将String转换成字节数组。
byte[] getBytes(String enc)
根据指定的编码将String转换为字节数组。

Ø  void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 拷贝字符至一数组中

Ø  int indexOf(int ch) 从字串的起始位置查找字符ch第一次出现的位置
int indexOf(int ch, int fromIndex)
从指定的fromIndex位置向后查找第一次出现ch的位置,
int indexOf(String str)
int indexOf(String str, int fromIndex)
如果不存在chstr都返回-1

Ø  int lastIndexOf(int ch) 从字串的最终位置往前查找第一次出现ch的位置
int lastIndexOf(int ch, int fromIndex) 
从指定的位置往前查找第一次出现ch的位置,
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
如果不存在则返回-1

Ø  int length() 该字符串的字符长度(一个全角的汉字长度为1

Ø  String replace(char oldChar, char newChar) 将字符oldChar全部替换为newChar 返回一个新的字符串。

Ø  String substring(int beginIndex) 返回从beginIndex开始的字符串子集
String substring(int beginIndex, int endIndex)
返回从beginIndexendIndex结束的字符串的子集。 其中endIndex – beginIndex等于子集的字符串长度

Ø  char[] toCharArray() 返回该字符串的内部字符数组

Ø  String toLowerCase() 转换至小写字母的字符串
String toLowerCase(Locale locale)
String toUpperCase()
转换至大写字母的字符串
String toUpperCase(Locale locale)

Ø  String toString() 覆盖了ObjecttoString方法, 返回本身。

Ø  String trim() 将字符串两边的半角空白字符去掉, 如果需要去掉全角的空白字符得要自己写。

Ø  static String valueOf(primitive p) 将其它的简单类型的值转换为一个String

 

StingBuffer是一个可变的字符串,它可以被更改。同时StringBufferThread safe的, 你可以放心的使用, 常用的方法如下:

Ø  StringBuffer append(param)  StringBuffer对象之后追加param(可以为所有的简单类型和Object) 返回追加后的StringBuffer 与原来的对象是同一份。

Ø  char charAt(int index) 返回指定位置index的字符。

Ø  StringBuffer delete(int start, int end) 删除指定区域start~end的字符。

Ø  StringBuffer deleteCharAt(int index) 删除指定位置index的字符。

Ø  void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) StringgetChars方法

Ø  StringBuffer insert(int offset, boolean b) 在指定位置offset插入param(为所有的简单类型与Object)

Ø  int length() Stringlength()

Ø  StringBuffer replace(int start, int end, String str) 将指定区域start~end的字符串替换为str

Ø  StringBuffer reverse() 反转字符的顺序

Ø  void setCharAt(int index, char ch) 设置字符chindex位置。

Ø  String substring(int start)

Ø  String substring(int start, int end) StringsubString

Ø  String toString() 返回一个String

 

大家可能已经注意到很多方法都返回了一个StringBuffer对象, 但返回的这个对象与String的方法返回的String不一样, 返回的StringBuffer对象与被操作的StringBuffer对象是同一份, String的方法返回的String则肯定是重新生成的一个String

3.2性能对比

因为String被设计成一种安全的字符串, 避免了C/C++中的尴尬。因此在内部操作的时候会频繁的进行对象的交换, 因此它的效率不如StringBuffer 如果需要频繁的进行字符串的增删操作的话最好用StringBuffer 比如拼SQL文, 写共函。 另: 编绎器对String+操作进行了一定的优化。

x = "a" + 4 + "c"

会被编绎成

x = new StringBuffer().append("a").append(4).append("c").toString()

但:

x = “a”;

x = x + 4;

x = x + “c”;

则不会被优化。 可以看出如果在一个表达式里面进行String的多次+操作会被优化, 而多个表达式的+操作不会被优化。

 

3.3技巧

1.    Servlet2.3JSP1.1以前画面post到后台的数据是通过ISO88591格式进行编码的, 则当遇到全角日文字的时候, 在后台request得到的数据可能就是乱码, 这个时候就得自己进行编码转换, 通过String.getBytes(String enc)方法得到一个字节流, 然后通过String(byte[] bytes, String enc)这个构造函数得到一个用新的编码生成的字符串. 例如将ISO88591的字符串转换成Shift_JIS的字符串, 方法如下:

public static String convertString(String str) {
	if (str == null) {
		return null;
	}
	
	try {
		byte[] buf = str.getBytes("ISO8859_1");
		return new String(buf, "Shift_JIS");
	} catch (Exception ex) {
		ex.printStackTrace();
		return null;
	}
}

 

不过在最新的Servlet2.3Jsp1.2中可以通过request.setCharacterEncoding来进行设置取值的码制, 不需要自己再做转换。

 

2.因为Java在计算String的长度是以字符为单位的, 因此一个全角与半角的字符长度是一样的, 但是DB中往往是根据字节来计算长度的, 因此我们在做Check的时候得要判断String的字节长, 可以用以下的方法:

 

 

 

public static String length(String str) {
	
	if (str == null) {
		return 0;
	}
	
	return str.getBytes().length;
}

 

分享到:
评论

相关推荐

    java学习的常用API

    Java学习的常用API是开发者日常编码和学习过程中不可或缺的参考资料,尤其对于初学者,理解并掌握这些API至关重要。本资源集合了多个领域的API文档,包括Struts2、Spring、Hibernate、MySQL、Oracle以及一些基础技术...

    javaapi合集

    对于开发者来说,深入理解和熟练运用Java API是提高编程效率和编写高质量代码的关键。通过阅读JDK_API_1_6_zh_CN.CHM这份中文参考文档,开发者可以详细了解到每个类的功能、方法的使用以及参数的含义,从而更好地...

    java 常用工具类

    以上就是关于"java 常用工具类"的一些关键知识点,了解并熟练运用这些工具类可以显著提高我们的编程效率,减少代码量,同时使得程序更易于理解和维护。通过阅读博文链接中的内容,可以深入学习和掌握更多实用技巧。

    JAVA初学者 第6到第8章(接口,异常,常用)

    在"JAVA初学者 第6到第8章"的学习资料中,你将深入理解这两个主题,并了解一些常用的Java编程技巧。 首先,让我们来探讨接口。在Java中,接口是一种完全抽象的类型,它只包含常量和抽象方法的声明,不包含任何实现...

    Java常用方法大全

    以上仅是Java常用方法的一小部分,实际上Java API包含数千个方法。通过深入学习和实践,你可以掌握更多高效编程技巧,提升自己的编程能力。在实际工作中,结合《Java常用方法大全》这样的参考资料,可以随时查阅和...

    java常用正则表达式(转)

    这篇博客“java常用正则表达式(转)”可能详细介绍了Java如何使用正则表达式进行各种操作。虽然没有具体的描述内容,但我们可以从标题和标签中推测,这篇博客可能涵盖了以下几个方面: 1. **正则表达式基础**: -...

    Java编程模式与范例:基础开发技巧

    10. **标准库和API**:Java的标准库提供了大量预定义的类和方法,如日期时间API、网络编程API、XML处理等,熟悉这些API能极大地提高开发效率。 通过对这些知识点的学习和实践,开发者不仅能掌握Java的基础开发技巧...

    Java 的常用包与数组的复制与排序26

    在Java编程语言中,了解和熟练使用常用的包以及...理解并熟练运用这些知识,将有助于提升Java编程的效率和质量。在实际开发中,还会涉及到更多高级特性和技巧,如多线程、并发控制、设计模式等,都需要不断学习和实践。

    Java程序设计技巧1001例

    "Java程序设计技巧1001例"这个资源显然旨在帮助开发者深入理解和运用这些技巧。以下是一些重要的Java编程技巧,涵盖了基础到高级的各个方面。 1. **异常处理**:在Java中,使用try-catch-finally语句块来处理异常是...

    Java编程技巧.pdf

    在Java编程中,掌握一些高效的编码技巧能显著提升代码质量并减少错误。以下是一些关键的知识点,基于提供的文件内容...在实际开发中,灵活运用这些技巧,不仅可以编写出高质量的代码,还能避免常见错误,提升开发效率。

    java程序设计技巧1001例

    在Java程序设计的世界里,掌握各种技巧是提升编程效率和代码质量的关键。"Java程序设计技巧1001例"是一本深入浅出的指南,它涵盖了从基础到高级的各种编程实践,旨在帮助开发者们更好地理解和运用Java语言。在这个...

    Java常用框架实战教程,包含Activiti,Dubbo

    Java编程语言在IT行业中占有重要地位,而Java开发者在日常工作中常常会接触到各种框架,以提升开发效率和软件质量。本教程重点聚焦于两个著名的Java框架:Activiti和Dubbo,它们分别在业务流程管理和分布式服务领域...

    Java手机短信项目源码Java实用源码整理learns

    3. **Java框架**:Spring、MyBatis、Hibernate等,是企业级开发中常用的工具,掌握它们可以提高开发效率。 4. **Java最佳实践**:包括代码规范、设计模式、重构技巧等,帮助写出更高质量的代码。 5. **开源社区**...

    JAVA2程序设计实务入门

    这些API的使用是Java编程实践中的常见任务,理解和熟练运用它们能大大提高开发效率。 在描述中提到“实务入门”,这意味着本书不仅会讲解理论知识,还会结合实际案例,提供代码示例和练习,帮助读者将所学知识应用...

    Java的常用的正则表达式

    下面我们将深入探讨Java中常用的正则表达式及其应用。 1. **正则表达式基础** - **字符类**:`[]`用于定义一个字符集合,例如`[abc]`匹配'a'、'b'或'c'。 - **量词**:`*`表示零个或多个,`+`表示一个或多个,`?`...

    Java程序设计教程第五版教材(美国)上的例题

    3. **工具**:现代Java开发离不开集成开发环境(IDE),如Eclipse、IntelliJ IDEA,它们提供了代码自动完成、调试、版本控制集成等功能,极大提高了开发效率。此外,构建工具如Maven或Gradle简化了项目的依赖管理和...

    平安Java考试题库

    8. **JVM**: 对Java虚拟机(JVM)的理解,包括内存管理(堆、栈、方法区)、垃圾回收机制、类加载过程以及性能优化技巧,对于写出高效且稳定的Java应用至关重要。 9. **Spring框架**: Spring是Java企业级应用中最...

    JAVA范例开发大全

    函数式编程在Java 8之后得到了加强,你可以通过阅读本书了解Lambda表达式、Stream API和方法引用来简化代码,提高代码的可读性和效率。 网络编程也是Java的一大特色,书中可能会涵盖Socket编程,让你学会如何创建...

Global site tag (gtag.js) - Google Analytics