文章最后附有String类中的方法摘要
基本类型声明:String 变量= “内容”
String str= "----";
类类型声明:String 对象 = new String(“内容”)
String str = new String("-----");
先看一看不同( == 和 equals的不同和 两种声明方式的不同)
String a1 = "a"; String a2 = "a"; String a3 = a1; // 栈中的和栈中的 System.out.println(a1 == a2); System.out.println(a1 == a3); System.out.println(a1.equals(a2)); System.out.println(a1.equals(a3)); 结果: true true true true String b1 = new String("b"); String b2 = new String("b"); String b3 = new String(b1); // 堆中的和堆中的 System.out.println(b1 == b2); System.out.println(b1 == b3); System.out.println(b1.equals(b2)); System.out.println(b1.equals(b3)); false false true true // 栈中的和堆中的 String newa = new String("a"); System.out.println(a1 == newa); System.out.println(a1.equals(newa)); false true
这是为什么呢?
1、== 比较的是两个字符串的内存地址是否相同(如果是基本数据类型直接比较值)
String.equals是先判断地址是否相同,地址相同直接返回true,如不相同再比较内容是否相同,如果内容相同则返回true,String.equals源码在下面。(Object中的equals方法就是 == 比较的)
2、这样写String b1 = new String(“b”)的时候,虽然编译器会说’new String’ 是冗余的,但这种和String a1="a"是不一样的
String a1=“a"中"a"是放在栈中的,而且a2的值和a1一样,a2和a1指向同一个地址(a1和a2引用同一个常量"a”)
String b1 = new String(“b”)中的"b"是放在堆中的,虽然b2的值和b1一样都是“b”,但b2和b1指向不同的地址
这是String类中的equals()方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
String str = "aa"; str += "bb";
replace(CharSequence target, CharSequence replacement) 结果是全部替换,虽然没写all,可别误会了。还有,这个不支持正则表达式,下面两个支持
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
CharSequence是一个接口,String、StringBuffer、StringBuilder都实现了这个接口
String str3 = "a d da da a"; String str4 = str3.replace("a", "d"); System.out.println(str3); System.out.println(str4); 结果: a d da da a d d dd dd d
注意转义字符的使用
同时使用不同的字符串分割同一字符,需要用 | 分开分隔符
String str2 = "a,b.c/d e"; String s[] = str2.split(",|\\.|\\/| "); // 同时使用 , . / 空格分割 for (String s1 : s) { System.out.println(s1); }
用于格式化字符串
String str5 = String.format("%x", 11); // 将11以16进制输出 System.out.println(str5); 结果为 b
// 关于转换符和转换符标识可以百度查一下
String 的方法
String() 初始化新创建的 String对象,使其表示空字符序列。 |
---|
String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。 |
String(byte[] bytes, Charset charset) 构造一个新的String由指定用指定的字节的数组解码[charset] 。 |
String(byte[] ascii, int hibyte) 已弃用 此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方法是通过String构造函数获取[Charset] ,字符集名称,或者使用平台的默认字符集。 |
String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。 |
String(byte[] bytes, int offset, int length, Charset charset) 构造一个新的String通过使用指定的指定字节子阵列解码[charset] 。 |
String(byte[] ascii, int hibyte, int offset, int count) 已弃用 此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方式是通过String构造函数获取[Charset] ,字符集名称,或使用平台的默认字符集。 |
String(byte[] bytes, int offset, int length, String charsetName) 构造一个新的 String通过使用指定的字符集解码指定的字节子阵列。 |
String(byte[] bytes, String charsetName) 构造一个新的String由指定用指定的字节的数组解码[charset] 。 |
String(char[] value) 分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。 |
String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子阵列中的字符。 |
String(int[] codePoints, int offset, int count) 分配一个新的 String ,其中包含 [Unicode code point]数组参数的子阵列中的 [字符] 。 |
String(String original) 初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。 |
String(StringBuffer buffer) 分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。 |
String(StringBuilder builder) 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。 |
char | charAt(int index) 返回 char指定索引处的值。 |
---|---|
int | codePointAt(int index) 返回指定索引处的字符(Unicode代码点)。 |
int | codePointBefore(int index) 返回指定索引之前的字符(Unicode代码点)。 |
int | codePointCount(int beginIndex, int endIndex) 返回此 String指定文本范围内的Unicode代码点数。 |
int | compareTo(String anotherString) 按字典顺序比较两个字符串。 |
int | compareToIgnoreCase(String str) 按字典顺序比较两个字符串,忽略病例差异。 |
String | concat(String str) 将指定的字符串连接到该字符串的末尾。 |
boolean | contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时才返回true。 |
boolean | contentEquals(CharSequence cs) 将此字符串与指定的CharSequence进行 CharSequence 。 |
boolean | contentEquals(StringBuffer sb) 将此字符串与指定的StringBuffer进行 StringBuffer 。 |
static String | copyValueOf(char[] data) 相当于 [valueOf(char[])] 。 |
static String | copyValueOf(char[] data, int offset, int count) 相当于 [valueOf(char[], int, int)] 。 |
boolean | endsWith(String suffix) 测试此字符串是否以指定的后缀结尾。 |
boolean | equals(Object anObject) 将此字符串与指定对象进行比较。 |
boolean | equalsIgnoreCase(String anotherString) 将此 String与其他 String比较,忽略案例注意事项。 |
static String | format(Locale l, String format, Object… args) 使用指定的区域设置,格式字符串和参数返回格式化的字符串。 |
static String | format(String format, Object… args) 使用指定的格式字符串和参数返回格式化的字符串。 |
byte[] | getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 |
byte[] | getBytes(Charset charset) 使用给定的[charset]将该String编码为字节序列,将结果存储到新的字节数组中。 |
void | getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) 已弃用 此方法无法将字符正确转换为字节。 从JDK 1.1开始,首选的方法是通过[getBytes()]方法,该方法使用平台的默认字符集。 |
byte[] | getBytes(String charsetName) 使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。 |
int | hashCode() 返回此字符串的哈希码。 |
int | indexOf(int ch) 返回指定字符第一次出现的字符串内的索引。 |
int | indexOf(int ch, int fromIndex) 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。 |
int | indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。 |
int | indexOf(String str, int fromIndex) 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。 |
String | intern() 返回字符串对象的规范表示。 |
boolean | isEmpty() 返回 true如果,且仅当 [length()]为 0 。 |
static String | join(CharSequence delimiter, CharSequence… elements) 返回一个新的字符串,由 CharSequence elements的副本组成,并附有指定的delimiter的 delimiter 。 |
static String | join(CharSequence delimiter, Iterable<? extends CharSequence> elements) 返回一个新 String的副本组成 CharSequence elements与指定的副本一起加入 delimiter 。 |
int | lastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引。 |
int | lastIndexOf(int ch, int fromIndex) 返回指定字符的最后一次出现的字符串中的索引,从指定的索引开始向后搜索。 |
int | lastIndexOf(String str) 返回指定子字符串最后一次出现的字符串中的索引。 |
int | lastIndexOf(String str, int fromIndex) 返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始向后搜索。 |
int | length() 返回此字符串的长度。 |
boolean | matches(String regex) 告诉这个字符串是否匹配给定的正则表达式 。 |
int | offsetByCodePoints(int index, int codePointOffset) 返回此 String内的指数,与 index codePointOffset代码点。 |
boolean | regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
boolean | regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
String | replace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。 |
String | replace(CharSequence target, CharSequence replacement) 将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列。 |
String | replaceAll(String regex, String replacement) 用给定的替换替换与给定的正则表达式)匹配的此字符串的每个子字符串。 |
String | replaceFirst(String regex, String replacement) 用给定的替换替换与给定的正则表达式匹配的此字符串的第一个子字符串。 |
String[] | split(String regex) 将此字符串分割为给定的正则表达式匹配。 |
String[] | split(String regex, int limit) 将这个字符串拆分为给定的正则表达式匹配。 |
boolean | startsWith(String prefix) 测试此字符串是否以指定的前缀开头。 |
boolean | startsWith(String prefix, int toffset) 测试在指定索引处开始的此字符串的子字符串是否以指定的前缀开头。 |
CharSequence | subSequence(int beginIndex, int endIndex) 返回一个字符序列,该序列是该序列的子序列。 |
String | substring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。 |
String | substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。 |
char[] | toCharArray() 将此字符串转换为新的字符数组。 |
String | toLowerCase() 将所有在此字符 String使用默认语言环境的规则,以小写。 |
String | toLowerCase(Locale locale) 将所有在此字符 String ,以降低使用给定的规则情况下 Locale 。 |
String | toString() 此对象(已经是字符串!)本身已被返回。 |
String | toUpperCase() 将所有在此字符 String使用默认语言环境的规则大写。 |
String | toUpperCase(Locale locale) 将所有在此字符 String使用给定的规则,大写 Locale 。 |
String | trim() 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 |
static String | valueOf(boolean b) 返回 boolean参数的字符串 boolean形式。 |
static String | valueOf(char c) 返回 char参数的字符串 char形式。 |
static String | valueOf(char[] data) 返回 char数组参数的字符串 char形式。 |
static String | valueOf(char[] data, int offset, int count) 返回 char数组参数的特定子阵列的字符串 char形式。 |
static String | valueOf(double d) 返回 double参数的字符串 double形式。 |
static String | valueOf(float f) 返回 float参数的字符串 float形式。 |
static String | valueOf(int i) 返回 int参数的字符串 int形式。 |
static String | valueOf(long l) 返回 long参数的字符串 long形式。 |
static String | valueOf(Object obj) 返回 Object参数的字符串 Object形式。 |