String的各类方法
目录
Eclipse中如何删除项目和导入项目
-
删除项目:
- 选中项目——右键——删除
- 打钩:从硬盘中直接删除
- 不打钩:从项目区域中删除
-
导入项目:
- 在项目区域右键找到import
- 找到General,展开
- 找到existing project into workspace
- 点击next,然后选择你要导入的项目
- 注意:这里选择的是项目名称
API(Application Programming Interface)
- 应用程序编程接口
- 就是Java提供给我们使用的类,这些类将底层的实现封装了起来
统计不同类型字符个数
-
要点:char c = s.charAt(i); 获取String字符串中的每一个字符
public class One { public static void main(String[] args) { String s = "ABCDEFabcdef123456/';=-"; int big = 0; int small = 0; int num = 0; int other = 0; for(int i = 0;i < s.length(); i ++) { char c = s.charAt(i); //通过索引获取每一个字符 if(c >= 'A' && c<='Z') { big++; }else if(c >= 'a' && c <= 'z') { small++; }else if(c >= '0' && c <= '9') { num ++; }else { other ++; } } System.out.println( s + "字符串中,有大写字母" + big + "个,有小写字母" + small + "个,有数字" + num + "个,其他字符" + other + "个" ); } } 输出结果:ABCDEFabcdef123456/';=-字符串中,有大写字母6个,有小写字母6个,有数字6个,其他字符5个
String类的转换功能(必须掌握)
-
byte[] getBytes():把字符串转换为字节数组
public static void main (String[] args) { String s1 = "abc"; byte[] arr = s1.getBytes(); for(int i = 0; i < arr.length; i ++) { System.out.println(arr[i] + " "); } System.out.println(); String s2 = "你好你好"; byte[] arr2 = s2.getBytes(); //通过gbk码表将字符串转换成字节数 for(int i = 0;i < arr2.length; i ++) { //编码:把我们看得懂转换成计算机看的懂的 System.out.println(arr2[i] + " "); //gbk码表一个中文代表两个字节 //gbk码表特点,中文的第一个字节肯定是负数 } } 输出结果:97 98 99 -60 -29 -70 -61 -60 -29 -70 -61
-
char [] toCharArray():把字符串转换为字符数组
public static void main(String[] args) { String s = "heima"; char[] arr = s.toCharArray(); //将字符串转换为字符数组 for (int i = 0 ; i < arr.length; i ++) { System.out.print(arr[i] + " "); } } 输出结果:h e i m a
-
static String valueOf(char[] chs):把字符数组转换成字符串
-
static String valueOf(int i):把int类型的数据转换成字符串
-
注意:String类的valueOf方法可以把任意类型的数据转换成字符串
public static void main(String[] args) { char[] arr = {'a','b','c'}; String s = String.valueOf(arr); System.out.println(s); String s2 = String.valueOf(100); System.out.println(s2 + 100); //将100转换为字符串 }
-
-
string toLowerCase():把字符串转成小写
-
String toUpperCase():把字符串转成大写
-
String concat(String str):把字符串拼接
public static void main(String[] args) { String s1 = "heiMA"; String s2 = "chengxuYUAN"; String s3 = s1.toLowerCase(); String s4 = s2.toUpperCase(); System.out.println(s3); System.out.println(s4); System.out.println(s3 + s3); //用+拼接字符串更强大,可以用字符串与任意类型相加 System.out.println(s3.concat(s4)); //concat方法调用和传入的都必须是字符串 } 输出结果:heima CHENGXUYUAN heimaCHENGXUYUAN heimaCHENGXUYUAN
按要求转换字符案例(链式编程)
-
要求:把一个字符串的首字母转成大写,其余为小写
public static void main(String[] args) { String s = "woaiHEIma"; String s2 = s.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase()); //从0到1截取字符串中的w System.out.println(s2); } 输出结果:Woaiheima
-
把数组中的数据按照指定格式拼接成一个字符串
public static void main(String[] args) { int [] arr = {1,2,3}; String s = "["; for(int i = 0; i < arr.length; i ++) { if(i == arr.length - 1) { s = s + arr[i] + "]"; }else { s = s + arr[i] + ","; } } System.out.println(s); } 输出结果:[1,2,3]
String类的其他功能
-
String的替换功能及案例演示
-
String replace(char old,char new)
-
String replace (String old,String new)
String s = "heima"; String s2 = s.replace('i','o'); System.out.println(s2); String s3 = s.replace('z','o'); //字符不存在就不替换,原样输出 System.out.println(s3); String s4 = s.replace("ei","ao"); System.out.println(s4); 输出结果:heoma heima haoma
-
-
String的去除字符串两空格及案例演示
-
String trim()
String s = " hei ma "; String s2 = s.trim(); System.out.println(s2); 输出结果:hei ma 应用:在用户输入密码的时候,对字符串两端的空格进行处理
-
-
String的按字典顺序比较两个字符串及案例演示
-
int compareTo(String str)
-
int compareToIgnoreCase(String str)
String s1 = "abc"; String s2 = "bcd"; int num = s1.compareTo(s2); System.out.println(num); 输出结果:-1 解释:a对应的是97,b对应的是98 97-98=-1 /*******************************************/ String s1 = "a"; String s2 = "aaaa"; int num = s1.compareTo(s2); System.out.println(num); 输出结果:-3 解释:如果字符都一样就按照长度来比较 /*******************************************/ String s3 = "黑"; String s4 = "马"; int num2 = s3.compareTo(s4); System.out.println('黑' + 0); //查找的是Unicode码表值 System.out.println('马' + 0); System.out.println(num2); 输出结果:40657 39532 1125 解释:查找Unicode的码表值,40657-39532=1125 /*******************************************/ String s5 = "heima"; String s6 = "HEIMA"; int num3 = s5.compareTo(s6); System.out.println(num3); int num4 = s5.compareToIgnoreCase(s6); System.out.println(num4); 输出结果:32 0
-
字符反转例题
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //创建键盘录入对象
System.out.println("请输入一个字符串:");
String line = sc.nextLine(); //将键盘录入的字符串存在line中
char[] arr = line.toCharArray(); //将字符串转换为字符数组
String s = "";
for(int i = arr.length - 1;i >= 0; i--) { //倒着遍历字符数组
s = s + arr[i]; //拼接成字符串
}
System.out.println(s);
}
}
运行结果:请输入一个字符串:
abc
cba
统计大串中小串出现的次数
public static void main(String[] args) {
String max = "woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma"; //定义大串
String min = "heima"; //定义小串
int count = 0; //定义计数器变量
int index = 0; //定义索引
//定义循环,判断小串是否在大串中出现
while((index = max.indexOf(min)) != -1) {
count++;
max = max.substring(index + min.length());
}
System.out.println(count);
}
输出结果:3
附加:
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);
输出:true
原理:这样创建出来的String是常量,会把数据放在常量池中。
当s1创建后,会把hello放在常量池中
当s2创建后,s2会现在常量池中寻找是否有hello这个数据,有就直接指向它,没有就写入新的数据(没有地址)
String s1 = new String ("my String");
String s2 = new String ("my String");
System.out.println(s1 == s2);
输出:false
原理:这样相当于创建了两个对象,对象在堆里,所以两者指向的对象都不一样,即地址不一样。