Java中String的学习与总结
构造方法
这里只介绍部分构造函数
- String()初始化空串
- String(byte[] bytes)byte类型数组,数据为char才能转为字符串
- String(byte[] bytes, Charset charset)以指定编码解析成字符串
- String(char[] value) char数组转为字符串
- String(String original) 获得的是original的副本
- String(StringBuffer buffer) StringBuffer 转为字符串
- String(StringBuilder builder) StringBuilder 转为字符串
方法
- charAt(int index) 返回索引处的字符
- codePointAt(int index) 返回索引处的代码点(我理解是ASCII处的整数值)
- compareTo(String anotherString) 两个字符串比较,0相等,正数大于,负数小于
- concat(String str) 字符串拼接
- contains(CharSequence s) 是否包含子串,只要是实现接口的类都可以
- contentEquals(CharSequence cs) 判断与cs是否相等,与equals相似
- copyValueOf(char[] data) 转为字符串,与ValueOf(char[])近似
- endsWith(String suffix) 是否已suffix为后缀
- equals(Object anObject) 判断两个字符串是否相等,不能==判断两个对象的相等
- getBytes()字符转为byte[]
- getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。
- indexOf(int ch) 返回ch在字符串中首次出现的位置,它还有许多重载的方法,具体看下面的代码
- isEmpty() 判空
- lastIndexOf(int ch) 与indexOf()类似,就是逆向的首次位置
- length() 字符串长度
- replace(char oldChar, char newChar) 字符替换
- split(String regex, int limit) 字符切割,limit为切割为几块,没有此参数则全部切割
- join(CharSequence delimiter, CharSequence… elements)用delimiter连接集合中的元素,组成一个字符串
- startsWith(String prefix)判断前缀
- substring(int beginIndex, int endIndex) 判断子串
- toCharArray() 返回char[]
- toLowerCase() 转为小写
- toUpperCase() 转为大写
- trim()去掉前导和尾部的空白
- valueOf(boolean b)将对应的类型转为字符串,重载的方法,多类型
下面是实践的代码
public static void main(String[] args){
//String 实现了Serializable, CharSequence,Compareable<String> 接口
//1.下面介绍String 的构造方法
String s1 = new String();//
byte[] by = new byte[]{'1','2'};//byte[]转为String
String s2 = new String(by);
System.out.println(s2);
Charset cs = Charset.forName("utf8");
String s3 = new String(by, cs);//将by按cs编码,生成字符串;
System.out.println(s3);
char[] c1 = new char[]{'a','b','c'};
String s4 = new String(c1);
System.out.println(s4);
String s5 = new String(c1,1,2);
System.out.println(s5);
String s6 = "s6";
String s7 = new String(s6);//是s6的一个副本
StringBuffer sb = new StringBuffer("stringbuffer");
StringBuilder sb1 = new StringBuilder("stringbuilder");//用stringbuilder初始化
System.out.println(sb);
System.out.println(sb1);
System.out.println(s7);
//测试String的方法
String tmp = "abcdefg";
System.out.println(tmp.charAt(1));//返回字符串某位置的字符,返回类型是char
System.out.println(tmp.codePointAt(1));//返回字符串指定索引处的字符,返回类型是int
System.out.println(tmp.compareTo("AFHdfad"));//返回两个字符串比较的结果,0相等,正数大,负数小
System.out.println(tmp.compareToIgnoreCase("ABCDEFG"));//忽略大小写的比较
System.out.println(tmp.concat("hijk"));//返回拼接后的字符串
System.out.println(tmp.contains("ab"));//是否包含CharSequence接口数据,该接口已实现的类包括(CharBuffer, Segment, String, StringBuffer, StringBuilder),返回类型是boolean
System.out.println(tmp.contentEquals("hijk"));//比较是否相等,参数类型是CharSequence
StringBuffer sb2 = new StringBuffer("sb2");
System.out.println(tmp.contentEquals(sb2));//重载,参数类型是StringBuffer
char[] c2 = new char[]{'c','d'};
System.out.println(tmp.copyValueOf(c2));//返回表示指定数组中表示该字符序列的String,返回类型是String
System.out.println(tmp.copyValueOf(c2,0,1));//返回表示指定数组中表示该字符序列的String,offset:起始位置,count:数量,返回类型是String
System.out.println(tmp.endsWith("fg"));//是否以参数为后缀,返回类型是boolean
System.out.println(tmp.equals("hijk"));//判断是否相等,返回类型是boolean
System.out.println(tmp.equalsIgnoreCase("dfadfadf"));//判断是否相等,忽略大小写,返回类型是boolean
byte[] byt = tmp.getBytes();//返回byte字符数组
for(byte b:byt){
System.out.print(b);
}
System.out.println();
char[] c3 = new char[100];
tmp.getChars(0,tmp.length(),c3,0);//将指定长度的紫川复制到char数组中,最后一个参数是其起始位置
for(char b:c3){
System.out.print(b);
}
System.out.println();
System.out.println(tmp.indexOf('g'));//查找下标,参数是正数类型,可以传入ASCII对应的整数,也可以传入字符,返回类型是int
System.out.println(tmp.indexOf('g',1));//查找下标,参数是正数类型,可以传入ASCII对应的整数,也可以传入字符,从指定下标开始,返回类型是int
System.out.println(tmp.indexOf("ef"));//查找子串对应的起始位置,第一个出现的位置,
System.out.println(tmp.indexOf("ef",3));//查找子串对应的起始位置,第一个出现的位置,
System.out.println(tmp.isEmpty());//是否为空串,返回boolean
String[] str = new String[]{"12","34"};
String s8 = String.join("->",str);//第一个参数是charSequence,第二个参数是charSequence集合,将集合中的元素用第一个参数串联起来
//lastIndexOf 与indexOf相似,都是查找目标字符或者字符串的位置,区别是一个向前,一个向后
System.out.println(s8);
System.out.println(tmp.length());//字符串长度
System.out.println(tmp.replace('a','B'));//替换,全部替换为第二个参数的字符
String tmp2 = "192.168.1.9";
String[] str3 = tmp2.split("\\.");//根据传入的参数切割为String字符串
for(String s: str3){
System.out.print(s);
}
System.out.println();
String[] str4 = tmp2.split("\\.",2);//切割为2部分
for(String s: str4){
System.out.print(s);
}
System.out.println();
System.out.println(tmp.startsWith("ab"));//判断参数是否是其前缀,
System.out.println(tmp.startsWith("ab",3));//判断参数是否是其前缀,从第二个参数开始
System.out.println(tmp.substring(3));//获取子串
System.out.println(tmp.substring(1,3));//获取子串,不包括结束为止字符
System.out.println(tmp.toLowerCase());//小写
System.out.println(tmp.toUpperCase());//大写
String tmp3 = " y e s ";
System.out.println(tmp3.trim());//去掉字符串中的前导空白和尾部空白
System.out.println(String.valueOf(10));//转为字符串类型
}
代码结果
总结
对于String 的迭代,可以使用for循环,利用charAt(i)获取,或者用for(Character c: A) 来遍历。
最近开始学习java,并试着学习怎么写总结。希望自己在Java上的理解要透彻,对一些基础的代码上,要做到手写,不能每次都去查询API。加油向前冲!