字符串的内容是不会发生改变的,它的对象在创建后不能被更改。
String是Java定义好的一个类。定义在Java.lang包中,所以使用的时候不需要导包。
Java程序中的所有字符串文字(例如”abcdefg“),都被实为此类的对象。
在JDK7之前,串池是在方法区内的,在JDK7后,串池存放在堆内存中。
例如下面的一段代码:
public class Test{
public static void main(String[] args){
String s1="abc";
String s2="abc";
}
}
在s1创建对象时,程序会先观察串池中是否有字符串abc,如果没有就创建,所以程序会在串池中创建abc。
在s2创建对象时,程序会先观察串池中是否有字符串abc,如果没有就创建,因为s1已经在串池中创建了abc,所以此时串池中是有abc的,所以s2就不再创建新的字符串。
所以上面的程序中s1和s2是指向同一块区域的。
而通过new出来的字符串和上面的情况一样吗?
public class Test{
public static void main(String[] args){
char[] s1={'a','b','c'};
String s2=new String(s1);
String s3=new String(s1);
}
}
首先,创建字符数组,字符‘a’、‘b’、‘c’会在堆内存中存储,s1获得字符的地址
s2由于是new出来的,因此程序会在堆内存中新创建一个内存,s2获得字符串"abc"的地址。
s3由于是new出来的,因此程序会在堆内存中新创建一个内存,s3获得字符串"abc"的地址。
因此s2和s3指向的是不同的字符串"abc"。
那么如何比较字符串呢?
compareTo可以用于比较两个字符串的AScii码值,因此可以用于Lambda表达式的返回值。
那么如何遍历字符串呢?
a b c d e
0 1 2 3 4
那么字符串如何反转呢?我们可以选择倒着遍历字符串
public class Test{
public static void main(String[] args){
String s1="abc";
String result=reverse(s1);
System.out.println(result);
}
public static String reverse(String str){
String result="";
for(int i=str.length()-1;i>=0;i--){ //将字符串倒着遍历,取出每个字符,将它们拼接起来
char c=str.charAt(i);
result=result+c;
}
return result;
}
}
那么如何把字符串由阿拉伯数字变成中文的大写呢?eg:123 ->零百零拾零万零千壹百二拾叁元
我们可以利用查表法
public class Test{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int money;
while(true){
money=sc.nextInt();
if(money>=0&&money<=9999999){
break;
}else{
System.out.println("金额无效");
}
}
String moneyStr="";
while(true){
int ge=money%10;
String capitalNumber=getCapitalNumber(ge);
moneyStr=capitalNumber+moneystr;
money=money/10;
if(money==0){
break;
}
}
int count=7-moneyStr.length();
for(int i=0;i<count;i++){
moneyStr="零"+moneyStr;
}
String result="";
String[] arr={"佰","拾","万","仟","佰","拾","元"};
for(int i=0;i<moneyStr.length();i++){
char c=moneyStr.charAt(i);
result=result+c+arr[i];
}
System.out.println(result);
}
public static String getCapitalNumber(int number){
String[] arr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
return arr[number];
}
}
字符串截取
手机号隐藏
public class Test{
public static void main(String[] args){
String phoneNumber="13177889911";
String start=phoneNumber.substring(0,3);
String end=phoneNumber.substring(7);
String result=start+"****"+end;
System.out.println(result);
}
}
敏感词替换
public class Test{
public static void main(String[] args){
String talk="你玩的真好,下次别玩了,TMD,MLGB,CNM";
//定义一个敏感词库
String[] sensitiveWord={"TMD","MLGB","CNM","SB"};
for(int i=0;i<sensitiveWord.length;i++){
talk=talk.replace(sensitiveWord[i],"***");
}
System.out.println(talk);
}
}
StringBuilder的方法