Java 字符串就是 Unicode 字符序列。 Java 没有内置的字符串类型, 而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。
构造字符串
最简单的就是直接创建字符串String str1 = "Hello World!";
第二种是使用String对象创建字符串。
String str2=new String("Hello");
或者利用字符数组或者字节数组创建字符串 char[] array = {'a','b','b'}; String str2=new String(array);//可以将char换为byte
,当然也可以直接创建空字符串。String str2=new String();
实际上还可以使用StringBuilder类来构建字符串。如果需要用许多小段的字符串构建一个字符串, 那么应该按照下列步骤进行。 首先, 构建一个空的字符串构建器:
StringBuilder builder = new StringBuilderO;
当每次需要添加一部分内容时, 就调用 append 方法。
builder.append(ch); // appends a single character bui1der.append(str); // appends a string
在需要构建字符串时就凋用 toString 方法, 将可以得到一个 String 对象, 其中包含了构建器
中的字符序列。String completedString = builder.toStringO;
StringBuilder的API:
字符串的不可变性
String 类没有提供用于修改字符串的方法,你发现,String 类中每一个看起来会修改 String 值的方法,实际上都是创建了一个全新的 String 对象,以包含修改后的字符串内容。而最初的 String 对象则丝毫未动,实际上String 对象是不可变的,由于不能修改 Java 字符串中的字符, 所以在 Java 文档中将 String 类对象称为不可变字符串。上面的几个字符串的内存如下。
编译器可以让字符串共享,所以字符串变量指向存储池中相应的位置。如果复制一个字符串变量, 原始字符串与复制的字符串共享相同的字符。从图中可以看到,只要是用引号声明的字符串,都放在了常量池中。而new出的字符串的地址不同。
字符串方法
这是一张字符串的函数表
下面来看看几个常用函数:
concat方法___拼接字符串
很实用的操作,可以将两个或几个字符串来凝结再一起,因为字符串不可改变,实际返回的一个新的字符串
String str1 = "123";
String str2 = "123";
String str3 = str1.concat(str2);
System.out.println(str);
这样新的字符串str3就是123123了,str1str2都不变,还有一种拼接是直接用加号连接。
//String str2 = "123";
String str4 = str1 + str2;
System.out.println(str);
返回的str4也是一个新的字符串,输出的是str,为123123. 注意啊,str3和str4虽然内容相同,但是地址却不一样,这两个123123可不在常量池。
length方法
简单的用来获取字符串的长度。
int len = str.length; System.out.println(len);
输出的是6.当然也可以System.out.println(str.length)
charAt方法
有一个字符串String s = "Hello!"
而charAt就能得到索引位置的字符。
char ch = s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ s.length()-l 之间
如果n大于了s.length-1,就会报错。
indexOf方法
同样的字符串s,使用indexOf来查找参数字符串在本来字符串出现的第一次索引位置。
int index = s.indexOf("lo");
等到的index就是3.
substring方法
这是字符串截取的函数,两种重载方式
public String substring(int index);//截取从参数位置一直到字符串末尾。返回新的字符串 public String substring(int begin,int end);//截取从begin开始,一直到end结束,没有end。返回新的字符串
substring 的工作方式有一个优点:容易计算子串的长度。字符串 s.substring(a, b) 的长度 为 b-a。例子就不写了。
toChArray方法
就是将当前字符串拆分为字符数组作为返回值。char[] chars = "wddqa".toCharArray();//字符数组
你就可以去处理字符数组了,首先就是可以处理单个字符。
getByte方法
获得当前字符串底层的字节数组。不常用,知道就好了。
replace方法
可以将所有出现的老字符串替换为新字符串。当然也是返回一个新的字符串
String str8 = "How do you do";
String str9 = str8.replace('o','%');
System.out.println(str9);
返回的新字符串str9是""H%w d% y%u d%"。
split方法
这是用于分割字符串的函数
String str = "aa,bb,cc";
String[] s = str.split(",");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
函数将str切割成了"aa","bb" ,"cc".将','给切开了。 注意,如果spilt的参数需要'.',那么需要写为'\.'
equals方法
使用 equals 方法检测两个字符串是否相等。equals检查两个字符串是否相等,而==只判断地址这个运算符只能够确定两个字串是否放置在同一个位置上。还有一点,要想检测两个字符串是否相等,而不区分大小写, 可以使用 equalsIgnoreCase 方法。
"String s = "Hello";Hello".equals(s)
结果是true.
空串和null
空串 "" 是长度为 0 的字符串。可以调用以下代码检查一个字符串是否为空:if (str.lengthQ = 0)
或
if (str.equals(""))空串是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)。String 变量还可以存放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联。要检查一个字符串是否为 null, 要使用以下条件:if (str == null)
有时要检查一个字符串既不是 null 也不为空串,这种情况下就需要使用以下条件:
if (str != null && str.lengthO != 0)