多个字符组成的一串数据,例如 “abc” 也能够当作是一个字符数组。java
而经过 API咱们又能够知道数组
A:字符串字面值“abc”也能够当作是一个字符串对象学习
B:字符串是常量,一旦被赋值,就不能改变ui
//空构造 public String() //把字节数组转换成字符串 public String(byte[] bytes) //把字节数组的一部分转换成字符串 public String(byte[] bytes,int offset,int length) //把字符数组转换成字符串 public String(char[] value) //把字符数组的一部分转换成字符串 public String(char[] value,int offset,int count) //把字符串常量值转换成字符串 public String(String original) //下面的这一个虽然不是构造方法,可是结果也是一个字符串对象 String s = "hello";
简单总结:String类的构造方法能够将 字节、字符数组、字符串常量(所有或者部分)转换为字符串类型code
//返回此字符串的长度 public int length ();
//之前三个为例 public class StringDemo { public static void main(String[] args) { //public String():空构造 String s1 = new String(); System.out.println("s1:" + s1); System.out.println("s1.length:" + s1.length()); System.out.println("-------------------------"); //把字节数组转换成字符串:public String(byte[] bytes) byte[] bys = {97,98,99,100,101}; //abcde String s2 = new String(bys); System.out.println("s2:" + s2); System.out.println("s2.length:" + s2.length()); System.out.println("-------------------------"); //把字节数组的一部分转换成字符串: //public String(byte[] bytes,int offset,int length) String s3 = new String(bys,1,3); System.out.println("s3:" + s3); System.out.println("s3.length:" + s3.length()); } } //运行结果: s1: s1.length:0 ------------------------- s2:abcde s2.length:5 ------------------------- s3:bcd s3.length:3
注:97,98,99,100,101 在ASCII码中表明abcde,不熟悉的朋友请自行查阅对象
例题一:索引
/* * 字符串特色:一旦被赋值,就不能改变 */ public class StringDemo { public static void main(String[] args) { String s = "Hello"; s += "World"; System.out.println("s:" + s); } } //运行结果: s:HelloWorld
**解释:**不能改变是指字符串对象自己不能改变,而不是指对象的引用不能改变,上述过程当中,字符串自己的内容是没有任何变化的,而是分别建立了三块内存空间,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String内容的改变其实是经过字符串之间的拼接、断开进行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld内存
总结:开发中,尽可能少使用 + 进行字符串的拼接,尤为是循环内,咱们更加推荐使用StringBuild、StringBuffer,此内容下一篇详细讲解。开发
例题二:字符串
//二者的区别 String s = new String("hello"); String s = "hello";
前者建立了2个 (1个) 对象,后者建立了1个 (0个) 对象
下面解释中若存在状况知足则,分别为建立1个和0个对象
解释:
String s = new String("hello"); 建立实例过程
在堆中建立一个对象 “hello” (new出来的),让 s 引用这个对象
在字符串常量池中查找是否存在内容为 “hello”的字符串对象
A:若存在,将new出的对象与字符串常量池中已存在的相联系
B:若不存在,则在字符串常量池中建立一个内容为 "abc" 的字符串对象,并与堆中 的对相联系
String s = "hello"; 建立实例过程
在字符串常量中查找是否存在内容为"hello"的字符串对象
A:若存在,让s直接引用该对象
B:若不存在,则直接让s引用该对象
总结:前者new一个对象,“hello”隐式建立一个对象,后者只有“hello”建立一个对象,在开发中,尽可能使用 String s = "hello" 的方式,效率比另外一种高。
例题三:
public class StringDemo { public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2);//false System.out.println(s1.equals(s2));//true String s3 = new String("hello"); String s4 = "hello"; System.out.println(s3 == s4);//false System.out.println(s3.equals(s4));//true String s5 = "hello"; String s6 = "hello"; System.out.println(s5 == s6);//true System.out.println(s5.equals(s6));//true } } //运行结果 false true false true true true
解释: == 比较地址值是否相同、String中的equals()比较字符串内容是否一致
例题四:
public class StringDemo2 { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s3 = "HelloWorld"; System.out.println(s3 == s1 + s2); System.out.println(s3.equals(s1 + s2)); System.out.println(s3 == "Hello" + "World"); //重点 System.out.println(s3.equals("Hello" + "World")); } } //运行结果 false true true true
总结:
//比较字符串的内容是否相同,区分大小写 boolean equals(Object obj) //比较字符串的内容是否相同,不区分大小写 boolean equalsIgnoreCase(String str) //判断大字符串中是否包含小字符串 boolean contains(String str) //判断某个字符串是否以某个指定的字符串开头 boolean startsWith(String str) //判断某个字符串是否以某个指定的字符串结尾 boolean endsWith(String str) //判断字符串是否为空 boolean isEmpty() 注意: String s = “ ”; // 字符串内容为空 String s = null; // 字符串对象为空
简单模拟登陆案例 (String版)
import java.util.Scanner; /* * 模拟登录案例,给三次机会,而且提示剩余次数 * A:定义用户名和密码(已经存在的) * B:键盘录入用户名和密码 * C:比较用户名和密码 * D:给三次机会,用循环改进 */ public class StringDemo { public static void main(String[] args) { for (int x = 0; x < 3; x++) { String username = "admin"; String password = "admin888"; Scanner sc = new Scanner(System.in); System.out.println("请输入用户名"); String name = sc.nextLine(); System.out.println("请输入密码"); String psw = sc.nextLine(); if (name.equals(username) && psw.equals(password)) { System.out.println("登陆成功"); } else { if ((2 - x) == 0) { System.out.println("你的帐号已经被锁定,请与管理员联系"); } else { System.out.println("登陆失败,你还有" + (2 - x) + "次机会"); } } } } }
//获取字符串的长度 int length() //获取指定索引的字符 char charAt(int index) //返回指定字符在此字符串中第一次出现的索引 int indexOf(int ch) //为何这里是int而不是char? //缘由是:‘a’和‘97’其实都能表明‘a’ int方便 //返回指定字符串在此字符串中第一次出现的索引 int indexOf(String str) //返回指定字符在此字符串中从指定位置后第一次出现的索引 int indexOf(int ch,int fromIndex) //返回指定字符串在此字符串中从指定位置后第一次出现的索引 int indexOf(String str,int fromIndex) //从指定位置开始截取字符串,默认到末尾 String substring(int start) //从指定位置开始指定位置结束截取字符串 String substring(int start,int end)
字符串中数据统计案例
import java.util.Scanner; /* * 案例:统计一个字符串中大写字母字符,小写字母字符,数字字符出现 * 的次数 */ public class StringDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入须要统计的数据"); String s = sc.nextLine(); int numberCount = 0; int smallCout = 0; int bigCout = 0; for (int x = 0; x < s.length(); x++) { char ch = s.charAt(x); if (ch >= 'a' && ch <= 'z') { smallCout++; } else if (ch >= 'A' && ch <= 'a') { bigCout++; } else if (ch >= '0' && ch <= '9') { numberCount++; } } System.out.println("大写字母:" + bigCout + "个"); System.out.println("小写字母:" + smallCout + "个"); System.out.println("数字:" + numberCount + "个"); } } //运行结果 请输入须要统计的数据 HelloWorld520 大写字母:2个 小写字母:8个 数字:3个
//把字符串转换为字节数组 byte[] getBytes() //把字符串转换成字符数组 char[] toCharArray() //把字符数组转换成字符串 static String valueOf(char[] chs) //把int类型的数据转换成字符串 static String valueOf(int i) //注意:String类的valueOf方法能够把任何类型的数据转换成字符串! //把字符串转换成小写 String toLowerCase() //把字符串转换成大写 String toUpperCase() //把字符串拼接 String concat(String str)
//替换功能 String replace(char old,char new) String replace(String old,String new) //去除字符串两端空格 String trim() //按字典比较功能 int compareTo(String str) int compareToIgnoreCase(String str)
逆序输出字符串案例
/* * 键盘输入 "abc" * 输出结果 "cba" */ import java.util.Scanner; public class StringDemo2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入:"); String line = sc.nextLine(); char[] chs = line.toCharArray(); String result = ""; for (int x = chs.length - 1; x >= 0; x--) { result += chs[x]; } System.out.println("reusult:" + result); } } //运行结果 请输入: abc reusult:cba
大串中查询小串案例
import java.util.Scanner; public class StringDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入被统计的数据"); String maxString = sc.nextLine(); System.out.println("请输入统计关键词"); String minString = sc.nextLine(); int count = getCount(maxString, minString); System.out.println("count:" + count); } public static int getCount(String maxString, String minString) { //定义一个统计变量,初始化为0 int count = 0; //先在大串中查找小串第一次出现的位置 int index = maxString.indexOf(minString); //索引不是-1,说明存在,统计变量++ while (index != -1) { count++; //把刚才的索引 + 小串的长度做为开始位置截取上一次的大串 //返回一个新的字符串,并把该字符串的值从新赋给大串 int startIndex = index + minString.length(); maxString = maxString.substring(startIndex); index = maxString.indexOf(minString); } return count; } } //运行结果 请输入被统计的数据 Hello520World520 请输入统计关键词 520 count:2
若是内容中有什么不足,或者错误的地方,欢迎你们给我留言提出意见, 蟹蟹你们 !^_^
若是能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)
在这里的咱们素不相识,却都在为了本身的梦而努力 ❤
一个坚持推送原创Java技术的公众号:理想二旬不止