版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/83387047
字符串
常量池:只是用来存放String类。jdk1.7以前是在方法区。1.7以后在堆。
intern():如果在常量池当中没有字符串的引用,那么就会生成一个在常量池当中的引用。相反则不生成。
String str1=new String("abc").intern().
- String:(字符串常量)适合单线程。是一个fanal,不能试图修改原来的值,只能创造新的对象。一旦改变等于创造了新的对象。
String str="abc"; //存放在常量池中。
String str1=new String("abc") ; //创造一个新的对象,字符串存在对象的value数组中。
- String.length:获取长度,也就是包含的字符数。
String str="abc";
int a =str.length();
- String.charAt(int index ):根据传进来的角标获取这个角标上的字符。(返回值 char)
String str="abc";
char ch=str.charAt(0);//'a';
- String.indexOf(int ch):返回的是ch在字符串中第一次出现的位置。(返回值 int,也就是角标)
- String.indexOf(int ch,int fromIndex):从from的位置开始获取ch在字符串中出现的位置。没有找到返回-1 。(返回值 int,也就是角标)
String str=”abcdeadhadhf";
str.indexOf('a');//返回角标0;
str.indexOf('a',3);//从3角标这个位置开始索引’a';
- String.indexOf(String str):返回的是str(字符串)在字符串中第一次出现的位置。(返回值 int,也就是角标(字符串中第一个字符的角标))
- String.indexOf(String str,int fromIndex):从from的位置开始获取str在字符串中出现的位置。没有找到返回-1 (返回值 int,也就是角标)
String str=”abcdeabcdf" ;
str.indexOf(“ead”,3);//从3角标这个位置开始索引”ead";
-
lastIndexOf():反向查找。参数和前四个类似,只不过是从右边开始查找(是查找不是数,找到后返回角标)。但角标还是那个角标。
-
String.codePointAt(int index) :找到这个位置的字符,但返回的是unicode码。
-
String.codePointBefore(int index):找到这个角标,返回这个角标之前字符的unicode 码。
-
String.startsWith(str):判断是否以指定内容开头;返回值为boolean
String str="ArrayDamo.java"
str.startsWith(Array);
- String.endsWith(str)/(String prefix, int toffset)从toffest角标开始判断。 :判断是否以指定内容结尾;返回值为boolean
String str="ArrayDamo.java"
str.endsWith(.java);
- String.isEmpty(): 原理是判断字符串长度是否为0;(“”)这是一个对象,(null)指向空。
- String.contains(str):字符串是否包含某个字串。底层调用indexOf方法。
String.indexOf(str)也可以用于判断是否包含某个字串,找到返回角标,找不到返回-1.
String str="ArrayDamo.java"
str.contains(Damo);
- String.equals(str) 判断字符串内容是否相同。
- String.equalsIgnoreCase(str):判断内容是否相同并忽略大小写。
- String(int[] codePoints, int offset(开始下标), int count(长度)):这里的入参是一个codePoint数组。在构造函数中,将codePoint转换成对应的char,然后赋值给String对象的value。 codepoint 就是表里面字符对应的数字。 传别的打印不出来。
- String(char value[], int offset, int count):传入一个字符数组,copy count位。
- String(byte bytes[], int offset, int length, String charsetName):字节数组转字符串,charsetName(unicode)
- String.copyValueOf(char data[])/(char data[], int offset, int count) :静态方法。字符数组转字符串。
- String.valueOf(int/double):基本数据类型转字符串。
- String.toCharArray():将字符串转成字符数组。
- String.getBytes():字符串转字节数组。
- String.getChars(int srcBegin, int srcEnd, char dst[], int dstBegin):字符串转字符数组
- String.substring(int beginIndex)(如果给0,默认取全部子串)/(int beginIndex, int endIndex):取子串。
- StringBuffer(字符串变量):适合在多线程使用。append:追加。追加后不改变地址值。
- synchronized:线程安全 .
//StringBuffer对象和String对象之间的互转的代码如下:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String
sb2.append("fdhfhdfk");//追加,并不产生新的对象。
- StringBuilder(字符串变量): append方法也不改变地址值,也不创建新的对象。适合单线程.
作业
public class StringDame {
public static String index(String str,int n){
String str1=str.substring(0,n+1);
String str2=str.substring(n+1);
str=str2+str1;
return str;
}
public static StringBuffer string(String str1){
char[] ch=new char [str1.length()];
str1.getChars(0,str1.length(),ch,0);
int index=str1.indexOf(" ");
int index1=str1.lastIndexOf(" ");
String s1=str1.substring(index1+1,str1.length());
StringBuffer st=new StringBuffer(s1);
st.append(ch,index,index1+1-index);
st.append(ch,0,index);
return st;
}
public static void main (String [] args){
String str=new String("abcdef");
int n=1;
System.out.println(index(str,n));
String str1="Here"+" "+"is"+" "+"Tulun";
System.out.println(string(str1));
}
}