java 字符串使用

2016-03-03 12:11:02   最后更新: 2016-03-03 12:11:02   访问数量:522




字符串操作是计算机程序设计中最常见的行为

java 提供了三种字符串操作类:

  1. String -- 最基本的不可变字符串类型
  2. StringBuilder -- 可变字符串类型
  3. StringBuffer -- 线程安全的可变字符串类型

 

String 对象是不可变的,所有的修改 String 对象值的方法实际上都创建了新的 String 对象,而最初的 String 对象丝毫未动

package cn.techlog.tesh; import java.util.HashMap; import java.util.Map; /** * Created by techlog on 2016/2/28. */ public class Test { public static String upcase(String s) { s = s + " world"; return s.toUpperCase(); } public static void main(String[] argv) { String q = "hello"; System.out.println(upcase(q)); } }

 

 

上面的代码中展示了 String 最基本的用法,使用 + 操作符连接了两个 String,然后转化为了大写

虽然在 String 对象中,jvm 实现了对操作符 + 的重载,但是实际上 java 并不允许用户为类创建任何重载操作符方法

 

java 的 String 对象拥有很多十分方便的操作,最基本的构造器有以下重载版本,利用他们可以十分方便的构造和生成你的 String 对象:

  1. String
  2. String(byte bytes[])
  3. String(byte bytes[], Charset charset)
  4. String(byte bytes[], int offset, int length)
  5. String(byte bytes[], int offset, int length)
  6. String(byte bytes[], int offset, int length, Charset charset)
  7. String(byte bytes[], int offset, int length, String charsetName)
  8. String(byte bytes[], String charsetName)
  9. String(char value[])
  10. String(char[] value, boolean share)
  11. String(char value[], int offset, int count)
  12. String(int[] codePoints, int offset, int count)
  13. String(String original)
  14. String(StringBuffer buffer)
  15. String(StringBuilder builder)

 

String 类提供的操作
方法名方法说明
charAtchar charAt(int index)返回指定索引位置的字符
codePointAtint codePointAt(int index)返回指定索引位置的 Unicode 编码值
compareToint compareTo(String anotherString)比较两个字符串
compareToIgnoreCaseint compareToIgnoreCase(String str)比较两个字符串(不区分大小写)
concatString concat(String str)连接两个字符串
containsboolean contains(CharSequence s)判断是否包含子字符串
contentEqualsboolean contentEquals(CharSequence cs)判断与字符串片段是否完全相同
·boolean contentEquals(StringBuffer sb)判断与 StringBuffer 是否完全相同
endsWithboolean endsWith(String suffix)判断是否以指定字符串结尾
equalsboolean equals(Object anObject)比较两个字符串是否完全相同
equalsIgnoreCaseboolean equalsIgnoreCase(String anotherString)比较两个字符串是否完全相同(忽略大小写)
getBytesbyte[] getBytes()返回 byte 数组
·byte[] getBytes(Charset charset)返回指定编码的 byte 数组
·byte[] getBytes(String charsetName)返回指定编码的 byte 数组
getCharsvoid getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)返回指定范围的字符数组
indexOfint indexOf(int ch)获取指定字符的索引
·int indexOf(int ch, int fromIndex)获取指定字符的索引
·int indexOf(String str)获取指定字符串的索引
·int indexOf(String str, int fromIndex)获取指定字符串的索引
isEmptyboolean isEmpty()返回字符串是否为空
lastIndexOfint lastIndexOf(int ch)返回字符的最后一次出现
·int lastIndexOf(int ch, int fromIndex)返回字符的最后一次出现
·int lastIndexOf(String str)返回字符串的最后一次出现
·int lastIndexOf(String str, int fromIndex)返回字符串的最后一次出现
lengthint length()返回字符串长度
matchesboolean matches(String regex)正则匹配
offsetByCodePointsint offsetByCodePoints(int index, int codePointOffset)返回指定 Unicode 编码所在的索引
regionMatchesboolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)返回子串是否匹配
·regionMatches(int toffset, String other, int ooffset, int len)返回子串是否匹配
replaceString replace(char oldChar, char newChar)字符替换
·String replace(CharSequence target, CharSequence replacement)子串替换
replaceAllString replaceAll(String regex, String replacement)正则替换
replaceFirstString replaceFirst(String regex, String replacement)正则替换,只替换一次
splitString[] split(String regex)根据正则切分字符串
·String[] split(String regex, int limit)根据正则切分字符串
startsWithboolean startsWith(String prefix)判断是否以字符串开始
·boolean startsWith(String prefix, int toffset)判断是否以字符串开始
subSequenceCharSequence subSequence(int beginIndex, int endIndex)截取字符串
substringString substring(int beginIndex)截取字符串
·substring(int beginIndex, int endIndex)截取字符串
toCharArraychar[] toCharArray()转换成字符数组
toLowerCaseString toLowerCase()转换成小写
toUpperCaseString toUpperCase()转换成大写
trimString trim()去除开头和结尾的空白字符

 

同时,String 类还提供了 static 操作,用来做一些一般性的操作:

String 类提供的 static 操作
方法名方法说明
copyValueOfstatic String copyValueOf(char data[])返回字符数组的拷贝(通过 String(char data[]) 构造器构造对象实现)
·static String copyValueOf(char data[], int offset, int count)返回字符数组指定范围的拷贝
formatstatic String format(Locale l, String format, Object... args)格式化输出
·static String format(String format, Object... args)格式化输出
lastIndexOfstatic int lastIndexOf(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex)返回目标字符串在源字符串的最后一次出现的索引
valueOfstatic String valueOf(boolean b)返回布尔值对应的"true"或"false"
·static String valueOf(char c)返回 c 对应的字符串
·static String valueOf(char data[])返回字符数组对应的字符串
·static String valueOf(char data[], int offset, int count)返回字符数组对应的字符串
·static String valueOf(double d)返回数字对应的字符串
·static String valueOf(float f)返回数字对应的字符串
·static String valueOf(int i)返回数字对应的字符串
·static String valueOf(long l)返回数字对应的字符串
·static String valueOf(Object obj)返回 "null" 或者对象的 toString 方法

 

String 提供了支持正则表达式的几个匹配、查找、拆分方法,关于正则表达式的语法,可以参看:

正则表达式

 

Java SE5 推出了类似于 C 语言风格的格式化输出功能,标准输出有 format 方法用来完成该功能,String 配合 Formatter 对象可以完成同样的功能

Formatter 对象可以完成向某个流格式化输出的功能:

package com.techlog.test; import java.io.PrintStream; import java.util.Formatter; public class Test { private String name; private Formatter f; public Test(String name, Formatter f) { this.name = name; this.f = f; } public void move(int x, int y) { f.format("%s for %d, %d\n", name, x, y); } public static void main(String[] argv) { PrintStream outAlias = System.out; Test testhello = new Test("Hello", new Formatter(System.out)); Test testworld = new Test("World", new Formatter(System.out)); testhello.move(0, 1); testworld.move(3, 8); } }

 

 

上面的代码展示了 Formatter 的用法,输出了:

Hello for 0, 1

World for 3, 8

 

格式化说明符

格式化输出需要使用格式化说明符:

%[argument_index$][flags][width][.precision]conversion

 

说明:

  • argument_index -- 应用参数的索引
  • flags -- 一些说明性标识,如 - 表示右对齐
  • width -- 用来指定最小尺寸,默认用空格填充空余
  • precision -- 最大尺寸,针对 String 指字符数,针对浮点类型,指小数的位数,如果应用于整数类型则会抛出异常

 

String 虽然十分常用,但是如果经常需要改变字符串的内容,那么使用 StringBuilder 和 StringBuffer 可以获得更好的性能,他们的区别在于 StringBuffer 是线程安全的

StringBuilder 更像是一个字符容器

StringBuilder 虽然没有提供 String 的那些灵活方便的方法,但对 String 的修改提供了很多有用的方法:

String 类提供的操作
方法名方法说明
构造器StringBuilder()无参构造器
·StringBuilder(int capacity)指定预留字符数的构造器
·StringBuilder(String str)用 String 构造一个 StringBuilder
appendStringBuilder append(boolean b)将参数连接到当前字符串后,参数支持各种类型
·StringBuilder append(CharSequence s, int start, int end)将参数字符串连接到当前字符串后
·StringBuilder append(char[] str, int offset, int len)将参数字符串连接到当前字符串后
appendCodePointStringBuilder appendCodePoint(int codePoint)将指定 Unicode 编码字符连接在当前字符串后
deleteStringBuilder delete(int start, int end)删除字符范围
deleteCharAtStringBuilder deleteCharAt(int index)删除指定索引的字符
indexOfint indexOf(String str)查找指定字符串
·int indexOf(String str, int fromIndex)查找指定字符串
insertStringBuilder insert(int offset, boolean b)在指定索引插入,第二个参数可以为各种类型
lastIndexOfint lastIndexOf(String str)查找字符串最后一次出现
·int lastIndexOf(String str, int fromIndex)
replaceStringBuilder replace(int start, int end, String str)字符串替换
reverseStringBuilder reverse()反转字符串

 

当需要使用 String 时,编译器会自动调用 StringBuilder 的 toString 方法转换为一个 String 对象,因此 StringBuilder 可以十分方便的自动使用 String 中的所有方法

 






技术帖      龙潭书斋      string      字符串      thinking in java      java编程思想      stringbuilder      stringbuffer      append      字符      tostring     


京ICP备15018585号