String赋值方法
-
String str=“fsdf” 直接赋值构造字符串
-
String str2=new String(“fdjs”);
-
char[] array={‘a’,‘b’,‘c’};
String str3=new String(array);
"fsdf"放到堆里的常量池,常量池里的字符串只存在一份
String str="abcdef";
String str1="abc"+"def";System.out.println(str==str1);
//true,在编译时已经进行拼接了
String str="abcdef";
String str2="abc"+new String("def");
System.out.println(str==str2);
//false,构造方法在运行时调用
String str1="abc";
String str2="def";
String str3=str1+str2;
String str="abcdef";
System.out.println(str==str3);//false
int a=360;
String str="abc"+"def"+a;
//产生两个对象,会调用StringBuilder类的append方法
equals方法
- String类已经重写了Object中的equals方法
- str.equals(str2):是用来比较str1变量本身所占内存的值所指向的对象和str2变量本身所占内存的值所指向的对象内容是否相同
- String类的equals方法是用来判断两个对象的内容是否相等,Object类的equals方法是用来判断两个对象是否是同一个对象;
如果希望不同内存但内容相同的两个对象equals时返回true,则我们需要重写父类的equals方法,如下
class A{
int i;
public A(int i){
this.i=i;
}
public boolean equals(Object obj){
A aa=(A)obj;
if(this.i==obj.i){
return true;
}else{
return false;
}
}
}
字符串比较大小方法
str.compareTo(str1);
intern方法
- 常量池当中存在返回常量池当中字符串对象的地址
- 常量池当中不存在,那么在常量池当中生成该对象的
String str=new String("hello").intern();
String str1="hello";
System.out.println(str==str1);//true;
反射-》Java的自省
String str="hello";
Class clc=String.class;
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
Field valueField = String.class.getDeclaredField("value");
// 将这个字段的访问属性设为
true valueField.setAccessible(true);
// 把 str 中的 value 属性获取到.
char[] value = (char[]) valueField.get(str);
// 修改 value 的值 value[0] = 'h';
System.out.println(str);
String类常用方法:
- public char charAt(int index):返回字符串中第index个字符
- public int length():返回字符串的长度
- public int indexOf(String str):返回字符串中出现str的第一个位置
- public int indexOf(String str,int
fromIndex):返回字符串中从fromIndex开始出现str的第一个位置 - public boolean equalsIgnoreCase(String
another):比较字符串是否与another是否一样(忽略大小写) - public String replace(char oldChar,char
newChar):在字符串中用newChar字符替换oldChar字符 - public String toUpperCase():返回一个字符串为该字符串的大写形式
- public String toLowerCase():返回一个字符串为该字符串的小写形式
- public String[] split(String regex)
public Stirng[] split(Stirng regex,int limit)
注意事项:
- 字符"|","*","+“都得加上转义字符,前面加上”".
- 而如果是"",那么就得写成"\".
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符
查找关键字ctrl+f键
String类静态重载方法:
- public static String valueOf(double d):可以将基本数据类型转换为字符串
- public Strin[] split(String regex):可以将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组
练习题:
1、统计一个String对象中大写字母、小写字母、非字母各自出现的个数
class A{
public static void main(String[] args){
String str="asFDSdfs!12";
int cntU=0;
int cntL=0;
int cntOther=0;
int i;
for(i=0;i<str.length();i++){
char ch=str.charAt(i);
if(Character.isUpperCase(ch)){
cntU++;
}else if(Character.isLowerCase(ch)){
cntL++;
}else{
cotOter++;
}
}
}
2、统计一个字符串在另一个字符串中出现的次数
public class A{
public static void main(String[] args){
String str1="abcasdabcabc";
String str2="abc";
int index=-1;
int cnt=0;
index=str1.indexOf(str2);
while(-1!=index){
cnt++;
index=str1.index(str2,index+str2.length());
}
System.out.println(cnt);
}
}
十六进制表示:Integer.toHexString(m).toUpperCase()
字符串和字符数组的转换
-
public String(char value[])
-
public String(char value[],int offset,int count)
-
public char charAt(int index)
-
public char[] toCharArray()
字节与字符串的转换
-
public String(byte bytes[])
-
public String(byte bytes[],int offset,int length)
-
public byte[] getBytes()
-
public byte[] getBytes()(String charsetName) throws
UnsupportedEncodingException