String类在java.lang包下,所以在使用时不需要导包;String类代表的是字符串,java程序中的所有字符串文字(例如:“abc”,“你好!”)都被实现为此类的实例。也就是,java程序中所有的双引号字符串,都是String类的对象。
String类的特点:
字符串不可变,它们的值在创建后不能被更改;字符串的值不可改变,但可共享;字符串效果上相当于字符数组(char[ ]),但是底层原理是字节数组(byte[ ])。
String构造方法:
public String() 创建一个空白字符串,不含有任何内容
public String(char[ ] chs) 根据字符数组的内容,创建字符串对象
public String(byte[ ] bys) 根据字节数组的内容,创建字符串对象
String s = "abc"; 直接赋值的方式创建字符串对象,内容就是双引号内的内容
public class String_test { public static void main(String[] args) { String s1 = new String(); System.out.println("s1:"+s1); char[] chs = {'a','b','c'}; String s2 = new String(chs); System.out.println("s2:"+s2); byte[] bys = {97,98,99}; String s3 = new String(bys); System.out.println("s3:"+s3); String s4 = "abc"; System.out.println("s4:"+s4); } } 输出结果:
String对象的特点:
(1)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同;
char[ ] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
(2)以“”方式给出的字符串,只要字符序列相同(顺序和大小写都相同),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护;
String s3 = "abc";
String s4 = "abc";
字符串的比较:
(1)使用 == 作比较
基本类型:比较的是数据值是否相同;
引用类型:比较的是地址值是否相同;
(2)使用 equals 方法作比较
public boolean equals(Object anObject):将字符串与指定对象进行比较。
public class String_test { public static void main(String[] args) { String s1 = new String(); char[] chs = {'a','b','c'}; String s2 = new String(chs); System.out.println("s2:"+s2); byte[] bys = {97,98,99}; String s3 = new String(bys); System.out.println("s3:"+s3); String s4 = "abc"; System.out.println("s4:"+s4); System.out.println(s1==s2); System.out.println(s3.equals(s4)); } } 输出结果:
String用户登录实例:
import java.util.Scanner; public class String_practice1 { public static void main(String[] args) { String name = "xiaotan"; String password = "tanjinsen"; Scanner input = new Scanner(System.in); System.out.println("请输入用户名:"); while (true) { String name_input = input.nextLine(); if (name.equals(name_input)) { for (int i = 0; i < 3; i++) { System.out.println("请输入密码:"); String pass_input = input.nextLine(); if (password.equals(pass_input)) { System.out.println("登陆成功!"); break; } else { System.out.println("密码错误,还有" + (2 - i) + "次机会!"); if (i == 2) { System.out.println("该账号已被锁定!请重新输入账号!"); } } } } else { System.out.println("账户不存在,请重新输入!"); } } } }
遍历字符串:
public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的;
public int length():返回字符串的长度,字符串对象.length()
遍历字符串通用格式:
for(int i = 0; i<s.length;i++){
System.out.println(s.charAt(i));
}
遍历字符串实例:
import java.util.Scanner; public class String_practice2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入字符串:"); String s = input.nextLine(); for (int i = 0; i < s.length(); i++) { System.out.println(s.charAt(i)); } } } 遍历字符串统计字符次数:
import java.util.Scanner; public class String_practice2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int count_daxie = 0; int count_xiaoxie = 0; int count_shuzi = 0; System.out.println("请输入字符串:"); String s = input.nextLine(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i)>='A'&&'Z'>=s.charAt(i)) count_daxie++; else if(s.charAt(i)>='a'&&'z'>=s.charAt(i)) count_xiaoxie++; else if (s.charAt(i)>='0'&&'9'>=s.charAt(i)) count_shuzi++; } System.out.println("大写字母出现次数:"+count_daxie); System.out.println("小写字母出现次数:"+count_xiaoxie); System.out.println("数字出现次数:"+count_shuzi); } } 字符串拼接:
public class String_practice3 { public static String arrayToString(char[] arr){ String s = new String(); s += "["; for (int i = 0; i < arr.length; i++) { if (i == arr.length-1){ s += arr[i]; } else { s += arr[i]; s += ","; } } s += "]"; return s; } public static void main(String[] args) { char[] arr = {'1','3','a','b','A','B'}; String s = ""; s = arrayToString(arr); System.out.println(s); } } 字符串反转:
public class String_reverse { public static String reverse(String s){ String s1 = ""; for (int i = 0; i <s.length() ; i++) { s1 += s.charAt(s.length()-1-i); } return s1; } public static void main(String[] args) { String s = "abcdefghjki"; s = reverse(s); System.out.println(s); } }