Concept
String类代表着字符串。所有的Java程序中的String文字都会使用该类实例。
String类在创建后是不可改变的,所以一旦创建了String对象,它的值就无法改变了。如果需要对字符串进行很多修改,那么应该选择使用StringBuffer和StringBuilder类。
Java语言为String的连接符(+)和其他对象装换到String对象提供了特殊的支持。我们用toString的方法实现这些转换,在Object中定义,并被Java中所有的类继承。
创建String
String strs = "String";
创建String[]
一般创建String[]有两种方法
String[] strs = new String[]{"dog", "cat", "rat"};
String[] strs = new String[3];
strs[0] = "dog";
strs[1] = "cat";
strs[2] = "rat";
第一种是直接在括号内加入String对象。
第二种是先固定数组长度再逐一赋值。(如果存在没有赋值的元素,那么初始值为null,记住Java成员变量创建后是有默认值的)
Method
Java中的String类包含了50多种方法,并且绝大多数使用频率都很高。
Type | Method | Significance |
---|---|---|
int | compareTo(String anotherString) | 按照词典顺序(ASCII)比较String的内容。大小写并不等价 |
String | concat(String str) | 返回一个新的String对象,内容为原始String接上参数String |
boolean | contains(CharSequence s) | 判断该String对象是否包含参数内容 |
boolean | contentEquals(CharSequence cs/StringBuffer sb) | 判断String对象是否与参数一致 |
char | charAt(int index) | 取得String该索引位置上的char |
boolean | endsWith(String suffix) | 判断参数是否为该字符串的后缀 |
boolean | equals(Object anObject) | 判断两个String内容是否相同 |
boolean | equalsIgnoreCase(String another) | 判断两个String的内容相同,忽略大小写 |
int | indexOf(char/String) | 如果该String并不包含此参数,就返回-1,否则返回参数在String中的起始索引 |
int | lastIndexOf(char/String) | 同上。lastIndexOf()是从后往前搜索 |
String | intern() | 为每个唯一的字符序列仅生成一个String引用 |
int | length() | 返回String长度 |
String | replace(char oldChar, char newChar) | 返回替换后的新String对象,如果没有替换发生,则返回原始String对象。参数也可以改为char序列 |
boolean | startsWith(String prefix) | 判断参数是否为该字符串的前缀 |
String | substring(int beginIndex, [int endIndex]) | 返回一个字符串子串对象 |
char[] | toCharArray() | 生成一个char数组,包含String的所有字符 |
String | toLowerCase() | String字符转换为小写,返回转换后的对象 |
String | toUpperCase() | String字符转换为大写,返回转换后的对象 |
String | trim() | 将String两端的空白字符删除后,返回一个新的String对象。无改变则返回原对象 |
static String | valueOf() | 参数可填boolean,char,char[],double,float,float,int,long,Object,都是返回一个表示参数内容的String |
当需要改变字符串内容时,String类的方法都会返回一个新的String对象。同时,如果内容没有发生改变,String的方法只是返回指向原对象的引用而已。这可以节约存储空间以及避免额外的开销。
Example
public class test{
public static void main(String args[]){
char[] character = {'s', 't', 'r', 'i','n', 'g','s' };
String strings = new String(character);
System.out.println(strings);//strings
//将char数组作为参数构造一个String对象
System.out.println(strings.charAt(4));//n
//返回String指定索引的char值
char[] character2 = strings.toCharArray();
System.out.println(character2 instanceof char[]);//true
//将String转换为char[]
String strings2 = "ring";
System.out.println(strings.equals(strings2));//false
System.out.println(strings.compareTo(strings2));//1
System.out.println(strings.contains(strings2));//true
//String对象间等同,比较,包含
System.out.println(strings.startsWith("str"));//true
System.out.println(strings.endsWith("s"));//true
//判断String对象前缀后缀
System.out.println(strings.indexOf("s"));//0
System.out.println(strings.lastIndexOf("s"));//6
//返回参数的索引,从前和从后搜索返回值不一样
String strings3 = strings.concat(strings2);
System.out.println(strings3);//stringsring
System.out.println(strings3.replace("r","w"));//stwingswing
System.out.println(strings3.toUpperCase());//STRINGSRING
//连接两个字符串,替换字符串中指定字母,转换大小写
String strings4 = " space ";
System.out.println(strings4);// space
System.out.println(strings4.trim());//space
//删除前后空白字符
}
}
String方法的确很多,经常使用即可记住。
空格,空对象,空格(20.4.5)
String s = null;
- 空对象是指定义一个对象,但是没有给该对象分配空间,即没有实例化该对象。因此,空对象在调用任何对象方法的时候都会抛出异常,如s.length(),s.isEmpty()等方法。
- 判断空对象用s==null,因为未实例化,不能用equals(),isEmpty()等方法。
String s = "";
- 空值是指一个字符串对象已经实例化,系统已经给该变量分配了空间,只是对象的内容为空。
- 判断空值有三种方法 (1)比较两对象内容是否相同 s.equals("");(2) 查看字符串对象字符个数 s.length()==0;(3) 判断字符串对象字符个数是否为0 s.isEmpty()
String n = " ";
- 空格是指一个字符对象已经实例化,对象的内容是空格。虽然在输出显示的时候跟空值是一样的,都是空值,但是在系统内面的内存机制是不一样的,对象内存空间里面有内容是空格,字符个数为1。
- 判断空格用s.equals(" ")。用对象方法的输出: s.length()的输出值为1,s.isEmpty()输出为false
String Char值相等比较(20.4.7)
String比较用equals方法
String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
System.out.println( a == b);//true
System.out.println( c == d);//false
System.out.println( a.equals(b));//true
System.out.println( c.equals(d));//true
- a b同一字符串引用 是同一对象地址 用"=="号返回true equals比较字符串的值相等
- c d 为不同对象 字符串值相等 地址不同 用等号不相等 equals比较值 不考虑地址 所以相等
- char只能用 "=="进行比较
String 与 Char之间的转换
String转换为char
- 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char。
- 使用String.toCharArray()(返回值为char[])可以得到将包含整个String的char数组。这样我们就能够使用从0开始的位置索引来访问string中的任意位置的元素。
Char转换为String
- String s = String.valueOf(‘c’); //效率最高的方法
- String s = String.valueOf(new char[]{‘c’}); //将一个char数组转换成String
- String s = Character.toString(‘c’);
- String s = new Character(‘c’).toString();
- String s = new String(new char[]{‘c’});