String
char charAt(int index) 返回char指定索引处的值
char[] toCharArray() 将此字符串转换为新的字符数组
int compareTo(String anotherString) 按字典顺序比较两个字符串
boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列才返回true
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开头
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结尾
boolean equals(Object anObject) 将此字符串与指定对象进行比较
boolean equalsIgnoreCase(String anotherString) 将此String与其他String比较,忽略案例注意事项
String concat(String str) 将指定的字符串连接到该字符串的末尾
String toUpperCase() 将所有在此字符String使用的默认语言环境的规则大写
String toLowerCase() 将所有在此字符String使用的默认语言环境的规则小写
int hashCode() 返回此字符串的哈希码
boolean isEmpty() 返回true如果,且仅当length()为0
int length() 返回此字符串的长度
byte[] getBytes() 使用平台的默认字符集将此string编码为字节序列,将结果存储到新的字节数组中。
byte[] getBytes(Charset charset) 使用给定的charset将该string编码为字节序列,将结果存储到新的字节数组中。
int indexOf(int ch) 返回指定字符第一次出现的字符串内的索引
int indexOf(int ch,int fromIndex) 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始
int lastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引
String intern() 返回字符串对象的规范表示
String substring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串
String trim() 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格
String toString() 此对象(依旧是字符串)本身已被返回
static String valueOf(boolean/char/int..... c) 返回参数的字符串
先补充方法外的知识:
string类代表字符串。Java程序中的所有字符串文字(例如"abc")都被实现为此类的实例。字符串不变;它们的值在创建后不能被更改。字符串缓冲区支持可变字符串。因为String对象是不可变的,它们可以被共享。
#拓展:我们知道,当两个String类型的值相加时,会出现这种情况:
使用+拼接运算运算的时候,底层实际上是使用StringBuilder类,但是,如果我们需要相加的String类型的数据太多的话,就不适合使用“+”,因为效率很低。
我们先运行这段代码:
运行结果:
需要5312毫秒,再看看另外一个使用append的方法:
运行结果:
只有141毫秒。
总结: 当数据特别多的时候,我们推荐使用append()。使用之前需要创建一个StringBuilder类,由StringBuilder类来使用append()。
接下来逐个介绍方法:
package com.itheima.string;
public class StringDemo01 {
public static void main(String[] args) {
String str = "abcdefghijklmn";
//获取指定下标的字符
char c = str.charAt(3);
System.out.println(c);
//将字符串转换为字符数组
char[] cs = str.toCharArray();
for(char ch : cs){
System.out.println(ch);
}
char[] arr = {'q','w','e','r','t','y','u'};
//将字符数组转换为字符串
String s = new String(arr);
System.out.println(s);
//从指定数组的指定下标开始,将指定个数字符转换为字符串
String s2 = new String(arr,2,3);
System.out.println(s2);
}
}
运行结果:
此处补充一下,
String(byte[] bt)可将字符数组转换为字符串,String(byte[] bt,offset,count)从指定数组的指定下标开始,将指定个数字符转换为字符串。
package com.itheima.string;
public class StringDemo02 {
public static void main(String[] args) {
String s1 = "demo";
String s2 = "demoa";
String s3 = "dea";
String s4 = "deb";
String s5 = "Acb";
String s6 = "acb";
//按字典顺序比较两个字符串
/*比较过程:
* 转化为字符数组后,会进行逐位比较,如果同一个位置上的字符不一致,
* 返回两个字符之差,如果每一个都一致,但是其中一个字符串先遍历完
* 成,则返回两个字符串的长度之差*/
int ct1 = s1.compareTo(s2);
System.out.println(ct1);
int ct2 = s3.compareTo(s4);
System.out.println(ct2);
int ct3 = s5.compareTo(s6);
System.out.println(ct3);
}
}
运行结果:
补充:compareTo(),按字典顺序比较两个字符串,转化为字符数组后,会进行逐位比较,如果同一个位置上的字符不一致,返回两个字符之差,如果每一个都一致,但是其中一个字符串先遍历完成,则返回两个字符串的长度之差。
package com.itheima.string;
public class StringDemo03 {
public static void main(String[] args) {
String s = "Big Data";
//判断字符是否包含指定的子串
System.out.println(s.contains("ata"));
//判断字符是否是指定开头
System.out.println(s.startsWith("a"));
//判断字符是否是指定结尾
System.out.println(s.endsWith("a"));
// 判断两个字符串是否相等
String s2 = "Big data";
System.out.println(s.equals(s2));
//忽略大小比较相等
System.out.println(s.equalsIgnoreCase(s2));
}
}
运行结果:
package com.itheima.string;
public class StringDemo04 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "def";
//concat 将指定的字符串连接到该字符串的末尾
System.out.println(s1.concat(s2));
//大写
System.out.println(s1.toUpperCase());
//小写
System.out.println(s1.toLowerCase());
//获取哈希码
System.out.println(s1.hashCode());
//获取字符串长度
System.out.println(s1.length());
//判断字符串是否为空
String s3 = "";//空串
String s4 = null;//为空
System.out.println(s1.isEmpty());
System.out.println(s3.isEmpty());
//System.out.println(s4.isEmpty());这么写会报错,因为isEmpty是判断字符串是否为空。
//空串和为空是不一样的,空串依然是一个字符串,只是里面什么都没有,为空是这个String类直接为null值。
System.out.println(s4 == null);//这种方式才可以判断是不是为空
}
}
运行结果:
补充:isEmpty(),这个方法可以判断字符串是否为空,也就是我们说的空串,什么是空串,在Java中,诸如“ ”,这种就是空串,空串和为空是不一样的,为空是null,如果本就为空,使用这个方法去判断字符串是否为空就会出现报错。
package com.itheima.string;
import java.io.UnsupportedEncodingException;
public class StringDemo05 {
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "大数据";
//转换为字节数组
byte[] bt1 = s.getBytes();
System.out.println(bt1.length);
//转换为指定编码的字节数组
byte[] bt2 = s.getBytes("GBK");
System.out.println(bt2.length);
byte[] bt3 = {97,98,99,100,101,102,103,104,105,106,107,108};
//字节数组转换为字符串
String s1 = new String(bt3);
System.out.println(s1);
//指定编码将字节数组转为字符串
String s2 = new String(bt1,"GBK");
System.out.println(s2);
//指定范围
String s3 = new String(bt2,2,4);
System.out.println(s3);
String s4 = new String(bt2,2,4,"GBK");
System.out.println(s4);
}
}
运行结果:
补充:依然是针对与String(),在上面的代码中,我们通过getbytes()获得了字节数组,同时也能指定GBK的编码方法,那么对于String()而言,既然能把字节数组转换为字符串,就能通过GBK编码方法把字节数组转换为字符串,也能指定范围。
package com.itheima.string;
public class StringDemo06 {
public static void main(String[] args) {
String str="Tarena Big Data";
//获取指定的字串在字符串中第一次出现的下标
int index = str.indexOf("a");
System.out.println(index);
//从小标为4的位置开始,向后寻找第一次出现a的位置
int index2 = str.indexOf("a", 4);
System.out.println(index2);
//获取指定的字符串最后一次出现的下标
int index3 = str.lastIndexOf("t");
System.out.println(index3);
}
}
运行结果:
package com.itheima.string;
public class StringDemo07 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = new String("abc");
//地址不同
System.out.println(s1==s2);
//intern 获取字符串的实际地址而不是内存地址
System.out.println(s1 == s2.intern());
//就去字符串
String s3 = "Tarena Big Data";
//截取指定小标开始到末尾
String sub1 = s3.substring(4);
System.out.println(sub1);
//截取指定范围字符串
//在Java中,表示范围,一般都是包前不包后/包小不包大
String sub2 = s3.substring(4,8);
System.out.println(sub2);
//toString对于字符串而言返回的就是自己本身
System.out.println(s3.toString());
//掐头去尾 去掉字符串的空白字符和尾部空格
String s4 = " abc xyz ";
System.out.println(s4);
System.out.println(s4.trim());
}
}
运行结果:
补充: substring(),是从指定索引开始截取字符串,也包括了指定索引所值的字符。如果又设定了结束索引时,最后一个索引所指的字符则不要,只要开始索引和结束索引中间的。trim(),是掐头去尾,去掉字符串的空白字符和尾部空格,字符串中间的空格不管。
package com.itheima.string;
import javafx.beans.binding.ObjectExpression;
public class StringDemo08 {
public static void main(String[] args) {
int i = 5;
double d = 3.25;
char c = 'a';
//valueOf()是将参数转化为字符串
String s = String.valueOf(i);
String s1 = String.valueOf(d);
String s2 = String.valueOf(c);
System.out.println(s);
System.out.println(s1);
System.out.println(s+s1+s2);
//如果转化的是对象,那么此时实际上是调用了这个对象的toString方法
Object o = new Object();
String s3 = String.valueOf(o);
System.out.println(s3);
System.out.println(o.toString());
int[] ints = {1,2,3,4,5,6};
String s4 = String.valueOf(ints);
System.out.println(s4);
//如果是字符数组,那么valueOf是将这个字符数组转化为字符串
char[] chars = {'a','b','c'};
String s5 = String.valueOf(chars);
System.out.println(s5);
System.out.println(chars.toString());
}
}
运行结果:
补充:关于valueOf(),首先需要知道valueOf()是将参数转化为字符串。而如果转化的是对象,那么此时实际上是调用了这个对象的toString方法。如果是字符数组,那么valueOf是将这个字符数组转化为字符串