1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 字符串 6 // 定义:String 类代表字符串。由多个字符组成的一串数据(类比:羊肉串)。字符数组可以由多个字符组成(类比,整型数组由多个整型数字组成)。 7 8 // 字符串的声明及赋值 9 // 1、String类代表字符串10 // 2、Java 程序中的所有字符串字面值(如 "abc" )都作为String类的实例实现。(对比,之前的实例实现通过new关键字进行类的实例化获得类的对象)11 // 3、字符串(字符串字面值)是常量,它们的值在创建后不能更改12 // 4、因为String对象是不可变得,所以可以共享("abc"这个字符串字面值可以被不同的String类型的对象拿来引用使用)13 // String str = "abc";14 15 // 字符串String类的常用构造函数:16 // 1、String() :初始化一个新创建的 String 对象,使其表示一个空字符序列。17 // 2、String(byte[] bytes) :通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。18 // 3、String(byte[] bytes, int offset, int length) :通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。19 // 4、String(char[] value) :分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。20 // 5、String(char[] value, int offset, int count) :分配一个新的 String,它包含取自字符数组参数一个子数组的字符。21 // 6、String(String original) :初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。22 23 // 字符串String类的常用成员方法:24 // 1、int length() :返回此字符串的长度。 25 String string1 = new String();26 System.out.println("string1:" + string1); // 显示为:string1: 看到显示的结果为无内容,显然String类是没有使用Object类继承而来的toString方法27 System.out.println("string1的长度为:" + string1.length()); // 028 System.out.println("-------------------------------------------------------");29 30 // byte[] bytes = { 65, 66, 67, 68 };31 byte[] bytes = { 97, 98, 99, 100 };32 String string2 = new String(bytes);33 System.out.println("string2:" + string2);34 System.out.println("string2的长度为:" + string2.length()); // 435 System.out.println("-------------------------------------------------------");36 37 String string3 = new String(bytes, 1, 2);38 System.out.println("string3:" + string3); // bc39 System.out.println("string3的长度为:" + string3.length()); // 240 41 // offset参数 或 length参数索引超出bytes数组的范围42 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: 543 // String string4 = new String(bytes, 3, 2);44 // System.out.println("string4:" + string4);45 // System.out.println("string4的长度为:" + string4.length());46 System.out.println("-------------------------------------------------------");47 48 char[] chars = { 'J', 'a', 'v', 'a', '真', '简', '单' };49 String string5 = new String(chars);50 System.out.println("string5:" + string5); // Java真简单51 System.out.println("string5的长度为:" + string5.length()); // 752 System.out.println("-------------------------------------------------------");53 54 String string6 = new String(chars, 1, 3);55 System.out.println("string6:" + string6); // ava56 System.out.println("string6的长度为:" + string6.length()); // 357 58 // offset参数 或 length参数索引超出chars数组的范围59 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: 960 // String string7 = new String(chars, 5, 4);61 // System.out.println("string7:" + string7); // ava62 // System.out.println("string7的长度为:" + string7.length());63 System.out.println("-------------------------------------------------------");64 65 String string8 = new String("中华人民共和国");66 System.out.println("string8:" + string8); // 中华人民共和国67 System.out.println("string8的长度为:" + string8.length()); // 768 System.out.println("-------------------------------------------------------");69 70 String string9 = "中华人民共和国";71 System.out.println("string9:" + string9); // 中华人民共和国72 System.out.println("string9的长度为:" + string9.length()); // 773 }74 }
1 package cn.temptation; 2 3 public class Sample02 { 4 public static void main(String[] args) { 5 // 如何理解:字符串是常量,它们的值在创建以后不能更改? 6 // 1、使用字符串字面值时,首先到堆内存中的方法区的字符串常量池中查找该字符串字面值是否存在,如果存在则直接拿来使用;如果不存在则创建之 7 // 2、字符串字面量的值是常量,这个值在方法区中的字符串常量池中创建后的确没有发生过改变 8 9 String str = "Java"; // 首先到堆内存中的方法区的字符串常量池中查找该字符串字面值是否存在,如果存在则直接拿来使用;如果不存在则创建"Java"字面量10 str += "真简单"; // 等价于:str = str + "真简单";11 // 分解:str + "真简单" -----> "Java" + "真简单",因为到字符串常量池中查找"真简单"这个字符串字面值是否存在,不存在则创建"真简单"字面量12 // 这里的加号作为字符串的连接 -----> "Java真简单",因为到字符串常量池中查找"Java真简单"这个字符串字面值是否存在,不存在则创建"Java真简单"字面量13 System.out.println(str); // Java真简单14 15 // 上述三行语句,实际上在字符串常量池中创建了3个字符串字面量16 }17 }
1 package cn.temptation; 2 3 public class Sample03 { 4 public static void main(String[] args) { 5 /* 6 * 1、== 做比较 7 * A:用在基本数据类型上,比较值是否相等 8 * B:用在引用数据类型上,比较地址值是否相同 9 * 10 * 2、equals 做比较11 * A:用在引用数据类型上:如果继承自Object类型的equals,还是比较的是地制值是否相同;有内容比较的要求可以通过重写equals方法来实现比较12 */13 14 // 下句是将字符串字面量赋值给String类型的变量,首先去字符串常量池中查找有没有"Java真简单"字符串实例实现,没有就创建之15 String string1 = "Java真简单";16 // 下句是通过new关键字在堆内存中开辟一块空间存放String类型的对象,而该构造函数会使用"Java真简单"这个字符串字面量17 // 使用这个字符串字面量还是去字符串常量池中查找有没有"Java真简单"字符串实例,这时已经存在该字面量了,就不再创建了,直接拿着用18 String string2 = new String("Java真简单");19 20 // 因为string1 和 string2 都是在栈上的声明,string1引用的是字符串字面量"Java真简单"的地址,string2引用的是在堆内存中开辟的空间地址21 // 自然不会相同,也就判断为false22 // System.out.println(string1 == string2); // false23 // System.out.println("string1`s hashCode:" + string1.hashCode()); // string1`s hashCode:-12500436624 // System.out.println("string2`s hashCode:" + string2.hashCode()); // string2`s hashCode:-12500436625 // 26 // String类的常用成员方法:27 // 1、boolean equals(Object anObject) :将此字符串与指定的对象比较。28 // 将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。 29 // String类的equals方法重写了继承自Object类的equals方法,比较两个字符串对象的内容30 System.out.println(string1.equals(string2)); // true31 32 // instanceof的使用:判断是否为某一类型的实现33 System.out.println(string1 instanceof String); // true34 System.out.println(string2 instanceof String); // true35 }36 }37 // 查看String类的equals方法的源码38 //public boolean equals(Object anObject) {39 // if (this == anObject) {40 // return true;41 // }42 // if (anObject instanceof String) {43 // String anotherString = (String)anObject;44 // int n = value.length;45 // if (n == anotherString.value.length) {46 // char v1[] = value;47 // char v2[] = anotherString.value;48 // int i = 0;49 // while (n-- != 0) {50 // if (v1[i] != v2[i])51 // return false;52 // i++;53 // }54 // return true;55 // }56 // }57 // return false;58 //}
1 package cn.temptation; 2 3 public class Sample04 { 4 public static void main(String[] args) { 5 // String string1 = new String("Java真简单"); 6 // String string2 = new String("Java真简单"); 7 // System.out.println(string1 == string2); // false 8 // System.out.println(string1.equals(string2)); // true 9 // System.out.println("string1`s hashCode:" + string1.hashCode()); // string1`s hashCode:-12500436610 // System.out.println("string2`s hashCode:" + string2.hashCode()); // string2`s hashCode:-12500436611 // System.out.println("-----------------------------------------");12 // 13 // String string3 = new String("Java真简单");14 // String string4 = "Java真简单";15 // System.out.println(string3 == string4); // false16 // System.out.println(string3.equals(string4)); // true17 // System.out.println("-----------------------------------------");18 19 // string5引用的字符串字面量是字符串常量池中的字面量"Java真简单"(首先也是在常量池中查找是否存在)20 String string5 = "Java真简单";21 // string6引用的字符串字面量就是字符串常量池中的字面量"Java真简单"22 String string6 = "Java真简单";23 System.out.println(string5 == string6); // true24 System.out.println(string5.equals(string6)); // true25 }26 }
1 package cn.temptation; 2 3 public class Sample05 { 4 public static void main(String[] args) { 5 String string1 = "Java"; 6 String string2 = "真简单"; 7 String string3 = "Java真简单"; 8 9 System.out.println(string3 == string1 + string2); // false10 // 通过反编译.class文件,发现上句其实是:11 // System.out.println(string3 == (new StringBuilder(String.valueOf(string1))).append(string2).toString()); 显然地址不一致12 13 System.out.println(string3.equals(string1 + string2)); // true14 // 通过反编译.class文件,发现上句其实是:15 // System.out.println(string3.equals((new StringBuilder(String.valueOf(string1))).append(string2).toString())); 比较的是内容,显然一致16 System.out.println("----------------------------------------");17 18 System.out.println(string3 == "Java" + "真简单"); // true19 // 通过反编译.class文件,发现上句其实是:20 // System.out.println(string3 == "Java真简单"); 显然地址一致21 22 System.out.println(string3.equals("Java" + "真简单")); // true23 // 通过反编译.class文件,发现上句其实是:24 // System.out.println(string3.equals("Java真简单")); 比较的是内容,显然一致25 System.out.println("----------------------------------------");26 27 System.out.println(string3 == string1 + "真简单"); // false28 // 通过反编译.class文件,发现上句其实是:29 // System.out.println(string3 == (new StringBuilder(String.valueOf(string1))).append("真简单").toString()); 显然地址不一致30 31 System.out.println(string3 == "Java" + string2); // false32 // 通过反编译.class文件,发现上句其实是:33 // System.out.println(string3 == (new StringBuilder("Java")).append(string2).toString()); 显然地址不一致34 35 System.out.println(string3.equals(string1 + "真简单")); // true36 // 通过反编译.class文件,发现上句其实是:37 // System.out.println(string3.equals((new StringBuilder(String.valueOf(string1))).append("真简单").toString())); 比较的是内容,显然一致38 39 System.out.println(string3.equals("Java" + string2)); // true40 // 通过反编译.class文件,发现上句其实是:41 // System.out.println(string3.equals((new StringBuilder("Java")).append(string2).toString())); 比较的是内容,显然一致42 43 /*44 * 结论:45 * 1、字符串变量做加法(连接)时,先去做开辟空间的事情,再去做字符串的连接46 * 2、字符串字面量(常量)做加法(连接)时,先做字符串的连接,再去常量池中查找是否存在,存在就直接使用,不存在就创建之47 * 3、字符串变量 和 字符串字面量做加法(连接)时,先去做开辟空间的事情,再去做字符串的连接48 */49 }50 }
1 package cn.temptation; 2 3 public class Sample06 { 4 public static void main(String[] args) { 5 /* 6 * String类的常用成员方法:(具有判断功能) 7 * 1、boolean equals(Object anObject) :将此字符串与指定的对象比较。 8 * 2、boolean equalsIgnoreCase(String anotherString) :将此 String 与另一个 String 比较,不考虑大小写。 9 * 3、boolean contains(CharSequence s) :当且仅当此字符串包含指定的 char 值序列时,返回 true。10 * 4、boolean startsWith(String prefix) :测试此字符串是否以指定的前缀开始。 11 * 5、boolean startsWith(String prefix, int toffset) :测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 12 * 6、boolean endsWith(String suffix) :测试此字符串是否以指定的后缀结束。 13 * 7、boolean isEmpty() :当且仅当 length() 为 0 时返回 true。 14 */15 String string1 = "Java";16 String string2 = "java";17 String string3 = "Java";18 19 System.out.println(string1.equals(string2)); // false20 System.out.println(string1.equals(string3)); // true21 System.out.println("-----------------------------------------");22 23 System.out.println(string1.equalsIgnoreCase(string2)); // true24 System.out.println(string1.equalsIgnoreCase(string3)); // true25 System.out.println("-----------------------------------------");26 27 // CharSequence不是char字符,而是字符序列。28 // String类实现了CharSequence接口29 // 语法错误:The method contains(CharSequence) in the type String is not applicable for the arguments (char)30 // System.out.println(string1.contains('a'));31 System.out.println(string1.contains("a")); // true32 System.out.println(string1.contains("b")); // false33 System.out.println(string1.contains("va")); // true34 System.out.println(string1.contains("sb")); // false35 System.out.println("-----------------------------------------");36 37 System.out.println(string1.startsWith("J")); // true38 System.out.println(string1.startsWith("J", 0)); // true39 System.out.println(string1.startsWith("J", 1)); // false40 System.out.println(string1.startsWith("ava", 1)); // true41 System.out.println("-----------------------------------------");42 43 System.out.println(string1.endsWith("a")); // true44 System.out.println(string1.endsWith("va")); // true45 System.out.println(string1.endsWith("Java")); // true46 System.out.println(string1.endsWith("av")); // false47 System.out.println("-----------------------------------------");48 49 String string4 = null; // null值50 String string5 = ""; // 空字符串51 String string6 = "0"; // 字符串内容为052 String string7 = "null"; // 字符串内容为null53 String string8 = " "; // 字符串内容为一个空格54 55 // 执行异常:java.lang.NullPointerException56 // System.out.println("string4 isEmpty:" + string4.isEmpty());57 System.out.println("string5 isEmpty:" + string5.isEmpty()); // true58 System.out.println("string6 isEmpty:" + string6.isEmpty()); // false59 System.out.println("string7 isEmpty:" + string7.isEmpty()); // false60 System.out.println("string8 isEmpty:" + string8.isEmpty()); // false61 }62 }
1 package cn.temptation; 2 3 public class Sample07 { 4 public static void main(String[] args) { 5 // String类的常用成员方法: 6 // String intern() :返回字符串对象的规范化表示形式。 7 // 一个初始为空的字符串池,它由类 String 私有地维护。 8 // 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。 9 // 否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 10 // 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。 11 // 所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。12 13 String string1 = "Java真简单";14 String string2 = new String("Java真简单");15 16 System.out.println(string1 == string2); // false17 System.out.println(string1 == string2.intern()); // true18 System.out.println(string1.intern() == string2.intern()); // true19 20 System.out.println(string1.equals(string2.intern())); // true21 }22 }
1 package cn.temptation; 2 3 public class Sample08 { 4 public static void main(String[] args) { 5 // String类的使用:涉及开发习惯 6 7 // String str = "java"; 8 // 变量str被赋值为null时,如下写法会产生执行异常:java.lang.NullPointerException,因为null值没有equals方法 9 String str = null;10 11 // 初始写法:12 // if (str.equals("javatemptation")) {13 // System.out.println("内容一致");14 // } else {15 // System.out.println("内容不一致");16 // }17 18 // 改进写法:因为字符串字面量一定有equals方法,所以把其放在前面,而可能有null的变量作为equals方法的参数,这样就避免了空指针异常19 if ("javatemptation".equals(str)) {20 System.out.println("内容一致");21 } else {22 System.out.println("内容不一致");23 }24 }25 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample09 { 6 public static void main(String[] args) { 7 // 需求:模拟用户登录,最多可以登录三次,且每次登录失败的话提示还有几次机会 8 9 // 思路:10 // 1、有设定好的帐号和密码用来进行对比是否输入正确11 // 2、通过Scanner类的方法接收控制台的键盘录入12 // 3、将输入的帐号和密码与设置好的帐号和密码进行对比:一致时,登录成功;不一致时(有一个不一致和两个都不一致),登录失败,提示登录失败13 // 4、登录次数的限制为3次,且在每次失败时提示还剩的次数14 15 // 设置帐号和密码16 String username_default = "admin";17 String password_default = "123";18 // 设置最多登录次数19 int maxCount = 3;20 21 Scanner input = new Scanner(System.in);22 23 for (int i = 0; i < maxCount; i++) {24 // 接收键盘录入25 System.out.println("输入帐号:");26 String username = input.nextLine();27 System.out.println("输入密码:");28 String password = input.nextLine();29 30 // 判断登录是否成功31 if (username_default.equals(username) && password_default.equals(password)) {32 System.out.println("登录成功!");33 // 登录成功时,就跳出循环34 break;35 } else {36 // 登录失败时37 int temp = maxCount - 1 - i;38 if (temp == 0) {39 System.out.println("登录失败,帐号已锁定!");40 } else {41 System.out.println("登录失败,还有" + temp + "次机会!");42 }43 }44 }45 46 input.close();47 }48 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample10 { 6 public static void main(String[] args) { 7 // Sample09的写法还是面向过程的写法,我们应该具备面向对象的思想 8 // 思考在登录这个事情中,有哪些对象?对象的行为是什么?对象的特征是什么? 9 // 分析出:有一个用户(对象),他/她有登录这个行为,会操作帐号和密码这两个特征 10 11 // 因为是由系统给予用户几次登录的机会,所以登录次数不应该属于用户,而是系统的特征 12 // 设置最多登录次数 13 int maxCount = 3; 14 15 // 静态方法的调用,注意方法中是否有成员变量,有的话,就必须设置成员变量为静态的 16 // test(maxCount); 17 18 // 非静态方法的调用 19 // 写法1:常规写法 20 // Sample10 sample10 = new Sample10(); 21 // sample10.test(maxCount); 22 23 // 写法2:匿名对象 24 (new Sample10()).test(maxCount); 25 } 26 27 /** 28 * 系统给予用户登录的操作 29 * @param maxCount 30 */ 31 // public static void test(int maxCount) { // 静态写法 32 public void test(int maxCount) { // 非静态写法 33 User user = new User(); 34 35 // 接收键盘录入 36 Scanner input = new Scanner(System.in); 37 38 for (int i = 0; i < maxCount; i++) { 39 // 接收键盘录入 40 System.out.println("输入帐号:"); 41 user.setUsername(input.nextLine()); 42 System.out.println("输入密码:"); 43 user.setPassword(input.nextLine()); 44 45 // 判断登录是否成功 46 if (user.checkLogin(user)) { 47 System.out.println("登录成功!"); 48 // 登录成功时,就跳出循环 49 break; 50 } else { 51 // 登录失败时 52 int temp = maxCount - 1 - i; 53 if (temp == 0) { 54 System.out.println("登录失败,帐号已锁定!"); 55 } else { 56 System.out.println("登录失败,还有" + temp + "次机会!"); 57 } 58 } 59 } 60 61 input.close(); 62 } 63 } 64 65 // 抽象出一个用户类 66 class User { 67 // 成员变量 68 // 帐号 69 private String username; 70 // 密码 71 private String password; 72 // 正确的用户帐号 73 private String username_default = "admin"; 74 // 正确的用户密码 75 private String password_default = "123"; 76 77 // 构造函数 78 public User() { 79 super(); 80 } 81 82 public User(String username, String password) { 83 super(); 84 this.username = username; 85 this.password = password; 86 } 87 88 // 成员方法 89 public String getUsername() { 90 return username; 91 } 92 93 public void setUsername(String username) { 94 this.username = username; 95 } 96 97 public String getPassword() { 98 return password; 99 }100 101 public void setPassword(String password) {102 this.password = password;103 }104 105 // 自定义的成员方法106 // 判断是否登录成功(这个成员方法功能OK,但是不够好,不够好的原因在于不够面向对象,因为这样写可能会有很长的参数列表)107 // public boolean checkLogin(String username, String password) {108 // // 判断109 // if (username_default.equals(username) && password_default.equals(password)) {110 // return true;111 // } else {112 // return false;113 // }114 // }115 116 // 改进写法117 // 判断是否登录成功(传入一般类的对象,这样就可以无视参数个数了,反正都是对象的特征)118 public boolean checkLogin(User user) {119 if (username_default.equals(user.getUsername()) && password_default.equals(user.getPassword())) {120 return true;121 } else {122 return false;123 }124 }125 }
1 package cn.temptation; 2 3 public class Sample11 { 4 public static void main(String[] args) { 5 /* 6 * String类的常用成员方法:(具有获取功能) 7 * 1、int length() :返回此字符串的长度。 8 * 2、char charAt(int index) :返回指定索引处的 char 值。 9 * 3、int indexOf(int ch) :返回指定字符在此字符串中第一次出现处的索引。10 * 4、int indexOf(int ch, int fromIndex) :返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。11 * 5、int indexOf(String str) :返回指定子字符串在此字符串中第一次出现处的索引。12 * 6、int indexOf(String str, int fromIndex) :返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。13 * 7、String substring(int beginIndex) :返回一个新的字符串,它是此字符串的一个子字符串。14 * 8、String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串的一个子字符串。 15 */16 String string1 = "javatemptation";17 System.out.println("string1`s length:" + string1.length()); // 1418 String string2 = "";19 System.out.println("string2`s length:" + string2.length()); // 020 String string3 = null;21 // 执行产生异常:java.lang.NullPointerException 空指针异常22 // System.out.println("string3`s length:" + string3.length());23 String string4 = " ";24 System.out.println("string4`s length:" + string4.length()); // 125 System.out.println("-----------------------------------------------------------");26 27 System.out.println("string1.charAt(7):" + string1.charAt(7)); // p28 // 执行产生异常:java.lang.StringIndexOutOfBoundsException: String index out of range: 20 索引越界异常29 // System.out.println("string1.charAt(20):" + string1.charAt(20));30 System.out.println("string1.charAt(13):" + string1.charAt(13)); // n31 System.out.println("-----------------------------------------------------------");32 33 System.out.println("string1.indexOf(106):" + string1.indexOf(106)); // 106表示的是j 034 System.out.println("string1.indexOf(97):" + string1.indexOf(97)); // 97表示的是a 135 // 返回:在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1。36 System.out.println("string1.indexOf(98):" + string1.indexOf(98)); // 98表示的是b -137 System.out.println("-----------------------------------------------------------");38 39 System.out.println("string1.indexOf(106, 0):" + string1.indexOf(106, 0)); // 106表示的是j 040 // 返回:在此对象表示的字符序列中第一次出现的大于或等于 fromIndex 的字符的索引;如果未出现该字符,则返回 -1。41 System.out.println("string1.indexOf(106, 1):" + string1.indexOf(106, 1)); // j -142 System.out.println("-----------------------------------------------------------");43 44 System.out.println("string1.indexOf(\"av\"):" + string1.indexOf("av")); // av 145 // 返回:如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1。46 System.out.println("string1.indexOf(\"vb\"):" + string1.indexOf("vb")); // vb -147 System.out.println("-----------------------------------------------------------");48 49 // 返回:指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。50 System.out.println("string1.indexOf(\"av\", 0):" + string1.indexOf("av", 0)); // av 151 System.out.println("string1.indexOf(\"av\", 1):" + string1.indexOf("av", 1)); // av 152 System.out.println("string1.indexOf(\"av\", 2):" + string1.indexOf("av", 2)); // av -153 System.out.println("string1.indexOf(\"vb\", 0):" + string1.indexOf("vb", 0)); // vb -154 System.out.println("-----------------------------------------------------------");55 56 // 参数:beginIndex - 起始索引(包括)。 57 System.out.println("string1.substring(0):" + string1.substring(0)); // javatemptation58 System.out.println("string1.substring(5):" + string1.substring(5)); // emptation59 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: -2 字符串索引越界异常60 // System.out.println("string1.substring(-2):" + string1.substring(-2));61 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: -6 字符串索引越界异常62 // System.out.println("string1.substring(20):" + string1.substring(20));63 System.out.println("-----------------------------------------------------------");64 65 // 参数:beginIndex - 起始索引(包括)。 endIndex - 结束索引(不包括)。 66 System.out.println("string1.substring(0, 1):" + string1.substring(0, 1)); // j67 System.out.println("string1.substring(0, 13):" + string1.substring(0, 13)); // javatemptatio68 System.out.println("string1.substring(0, 14):" + string1.substring(0, 14)); // javatemptation69 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: 20 字符串索引越界异常70 // System.out.println("string1.substring(0, 20):" + string1.substring(0, 20));71 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: -2 字符串索引越界异常72 // System.out.println("string1.substring(-2, 14):" + string1.substring(-2, 14));73 // 执行异常:java.lang.StringIndexOutOfBoundsException: String index out of range: -2 字符串索引越界异常74 // System.out.println("string1.substring(10, 8):" + string1.substring(10, 8));75 System.out.println("string1.substring(0, string1.length()):" + string1.substring(0, string1.length())); // javatemptation76 System.out.println("string1.substring(0, string1.length() - 1):" + string1.substring(0, string1.length() - 1)); // javatemptatio77 }78 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample12 { 6 public static void main(String[] args) { 7 // 需求:通过键盘录入,循环获取输入的一个字符串中的每一个字符并显示出来 8 // 例如:输入:abc,显示出 a b c 9 10 String str = "";11 12 System.out.println("输入一个字符串:");13 Scanner input = new Scanner(System.in);14 if (input.hasNextLine()) {15 str = input.nextLine();16 } else {17 System.out.println("输入的不正确!");18 }19 input.close();20 21 for (int i = 0; i < str.length(); i++) {22 System.out.print(str.charAt(i) + "\t");23 }24 }25 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample13 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的一个字符串(仅限于有大写英文、小写英文和数字),统计一下该字符串中大写英文字符有多少个?小写英文字符有多少个?数字字符有多少个? 8 // 例如:"Java123456":大写1个、小写3个、数字6个 9 10 // 思路:(人为控制输入格式的版本)11 // 1、接收键盘录入的字符串,循环取得该字符串的每一个字符12 // 2、判断每一个字符是大写,还是小写,还是数字13 // 3、分类做累加14 15 String str = "";16 // 大写英文字符的个数17 int upperCount = 0;18 // 小写英文字符的个数19 int lowerCount = 0;20 // 数字字符的个数21 int numberCount = 0;22 23 System.out.println("输入一个字符串(仅限于有大写英文、小写英文和数字):");24 Scanner input = new Scanner(System.in);25 if (input.hasNextLine()) {26 str = input.nextLine();27 } else {28 System.out.println("输入不正确!");29 }30 input.close();31 32 for (int i = 0; i < str.length(); i++) {33 // 获取单个字符34 char temp = str.charAt(i);35 36 // 判断写法137 // if (temp >= 65 && temp <= 90) { // 大写英文字符38 // upperCount++;39 // } else if (temp >= 97 && temp <= 122) { // 小写英文字符40 // lowerCount++;41 // } else if(temp >= 48 && temp <= 57) { // 数字字符42 // numberCount++;43 // }44 45 // 判断写法246 if (temp >= 'A' && temp <= 'Z') { // 大写英文字符47 upperCount++;48 } else if (temp >= 'a' && temp <= 'z') { // 小写英文字符49 lowerCount++;50 } else if(temp >= '0' && temp <= '9') { // 数字字符51 numberCount++;52 }53 }54 55 System.out.println("字符串:" + str + "中,大写英文字符有:" + upperCount + "个,小写英文字符有:" 56 + lowerCount + "个,数字字符有:" + numberCount + "个");57 }58 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample14 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入的一个字符串(仅限于有大写英文、小写英文和数字),统计一下该字符串中大写英文字符有多少个?小写英文字符有多少个?数字字符有多少个? 8 // 例如:"Java123456":大写1个、小写3个、数字6个 9 10 // 思路:(程序控制输入格式的版本)11 // 1、接收键盘录入的字符串,循环取得该字符串的每一个字符12 // 2、判断每一个字符是大写英文、还是小写英文、还是数字,如果都不是,那么就是不正确的输入,应该提示让其重新输入;否则进行统计13 // 3、对于输入正确格式的字符串,循环获取每一个字符并进行判断统计14 15 Scanner input = new Scanner(System.in);16 17 String str = "";18 // 大写英文字符的个数19 int upperCount = 0;20 // 小写英文字符的个数21 int lowerCount = 0;22 // 数字字符的个数23 int numberCount = 0;24 25 for(;;) {26 // 声明统计执行判断标识27 boolean flag = true;28 29 // 1、判断操作,看看输入格式是否正确30 System.out.println("输入一个字符串(仅限于有大写英文、小写英文和数字):");31 if (input.hasNextLine()) {32 str = input.nextLine();33 } else {34 System.out.println("输入的内容不是字符串!");35 break;36 }37 38 // 对输入的字符串的格式进行判断39 for (int i = 0; i < str.length(); i++) {40 char temp = str.charAt(i);41 42 if (!((temp >= 'A' && temp <= 'Z') || (temp >= 'a' && temp <= 'z') || (temp >= '0' && temp <= '9'))) {43 // 大写英文字符、小写英文字符、数字字符之外的都是不正确的格式44 System.out.println("输入的字符串格式不正确,仅限有大写英文、小写英文和数字!");45 flag = false;46 // 考虑:这里使用break? 还是使用continue?47 // 因为只要有一个字符是不合规则的字符,就不用再判断其他字符是否符合规则了,所以使用break跳出内层for循环48 break;49 }50 }51 52 // 2、统计操作53 if (flag) {54 for (int i = 0; i < str.length(); i++) {55 // 获取单个字符56 char temp = str.charAt(i);57 58 // 判断写法159 // if (temp >= 65 && temp <= 90) { // 大写英文字符60 // upperCount++;61 // } else if (temp >= 97 && temp <= 122) { // 小写英文字符62 // lowerCount++;63 // } else if(temp >= 48 && temp <= 57) { // 数字字符64 // numberCount++;65 // }66 67 // 判断写法268 if (temp >= 'A' && temp <= 'Z') { // 大写英文字符69 upperCount++;70 } else if (temp >= 'a' && temp <= 'z') { // 小写英文字符71 lowerCount++;72 } else if(temp >= '0' && temp <= '9') { // 数字字符73 numberCount++;74 }75 }76 77 System.out.println("字符串:" + str + "中,大写英文字符有:" + upperCount + "个,小写英文字符有:" 78 + lowerCount + "个,数字字符有:" + numberCount + "个");79 80 // 正确的格式输入后,进行统计操作,操作结束后跳出当前的外层循环(死循环)81 break;82 }83 }84 85 input.close();86 }87 }
1 package cn.temptation; 2 3 public class Sample15 { 4 public static void main(String[] args) { 5 /* 6 * String类的常用成员方法:(具有转换功能) 7 * 1、byte[] getBytes() :使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 8 * 2、char[] toCharArray() :将此字符串转换为一个新的字符数组。 9 * 3、static String valueOf(char[] data) :返回 char 数组参数的字符串表示形式。10 * 4、static String valueOf(int i) :返回 int 参数的字符串表示形式。11 * 5、String toLowerCase() :使用默认语言环境的规则将此 String 中的所有字符都转换为小写。12 * 6、String toUpperCase() :使用默认语言环境的规则将此 String 中的所有字符都转换为大写。13 * 7、String concat(String str) :将指定字符串连接到此字符串的结尾。 14 */15 16 String string1 = "javatemptation";17 18 // 将字符串转换为byte数组19 byte[] arrByte = string1.getBytes();20 for (byte item : arrByte) {21 System.out.println(item);22 }23 System.out.println("------------------------------------------------------");24 25 // 将字符串转换为char数组26 char[] arrChar = string1.toCharArray();27 for (char item : arrChar) {28 System.out.println(item);29 }30 System.out.println("------------------------------------------------------");31 32 // 将字符数组转换为字符串(与上述方法是可逆操作)33 String string2 = String.valueOf(arrChar);34 System.out.println(string2);35 System.out.println("------------------------------------------------------");36 37 int i = 97;38 // int类型转换成字符串类型的方法139 // String string3 = String.valueOf(i);40 // System.out.println(string3); // 9741 // 42 // String string4 = String.valueOf((char)i);43 // System.out.println(string4); // a44 // 45 // String string5 = String.valueOf((int)'a');46 // System.out.println(string5); // 9747 48 // int类型转换成字符串类型的方法249 System.out.println(i + ""); // 9750 System.out.println("" + i); // 9751 System.out.println(" " + i); // 空格9752 System.out.println((String)(i + "")); // 9753 // 语法错误:Invalid character constant54 // System.out.println(i + '');55 // 语法错误:Char cannot be resolved to a type56 // System.out.println((char)(i + ""));57 System.out.println("------------------------------------------------------");58 59 String string6 = "JAVATEMPTATION";60 System.out.println(string6.toLowerCase()); // javatemptation61 System.out.println("------------------------------------------------------");62 63 String string7 = "javatemptation";64 System.out.println(string7.toUpperCase()); // JAVATEMPTATION65 System.out.println("------------------------------------------------------");66 67 String string8 = "offerfirstblood";68 System.out.println(string1.concat(string8)); // javatemptationofferfirstblood69 }70 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample16 { 6 public static void main(String[] args) { 7 // 需求:根据键盘录入一个字符串(仅限大写英文字符和小写英文字符),显示该字符串,且转换该字符串为首字符大写,其他字符均小写,并显示转换后的字符串 8 // 例如:"javaTEMPTATION" ------> "Javatemptation" 9 String str = ""; 10 11 System.out.println("录入一个字符串(仅限大写英文字符和小写英文字符):"); 12 Scanner input = new Scanner(System.in); 13 if (input.hasNextLine()) { 14 str = input.nextLine(); 15 } else { 16 System.out.println("输入的格式不正确!"); 17 } 18 input.close(); 19 20 // 思路1: 21 // 1、获取输入的字符串,循环遍历得到每一个字符 22 // 2、判断第一个字符是否为大写字符,如果不是,转为大写 23 // 3、判断从第二个字符到最后一个字符是否为小写字符,如果不是,转为小写 24 // 4、将转换后的字符组成字符串输出 25 // char[] arrChar = new char[str.length()]; 26 // 27 // for (int i = 0; i < arrChar.length; i++) { 28 // char temp = str.charAt(i); 29 // 30 // if (i == 0) { // 第一个字符 31 // if (temp >= 'a' && temp <= 'z') { 32 // // 小写字符转换为大写字符 33 // temp -= 32; 34 // } 35 // } else { // 从第二个字符到最后一个字符 36 // if (temp >= 'A' && temp <= 'Z') { 37 // // 大写字符转换为小写字符 38 // temp += 32; 39 // } 40 // } 41 // 42 // arrChar[i] = temp; 43 // } 44 // 45 // System.out.println("转换后的字符串为:" + String.valueOf(arrChar)); 46 47 // 思路2: 48 // 1、获取输入的字符串,直接转为char数组 49 // 2、判断第一个字符是否为大写字符,如果不是,转为大写 50 // 3、判断从第二个字符到最后一个字符是否为小写字符,如果不是,转为小写 51 // 4、将转换后的字符组成字符串输出 52 53 // 写法2-1 54 // char[] arrChar = str.toCharArray(); 55 // if (arrChar[0] >= 'a' && arrChar[0] <= 'z') { // 第一个字符 56 // // 小写字符转换为大写字符 57 // arrChar[0] -= 32; 58 // } 59 // // 从第二个字符到最后一个字符判断 60 // for (int i = 1; i < arrChar.length; i++) { 61 // if (arrChar[i] >= 'A' && arrChar[i] <= 'Z') { 62 // // 大写字符转换为小写字符 63 // arrChar[i] += 32; 64 // } 65 // } 66 // 67 // System.out.println("转换后的字符串为:" + String.valueOf(arrChar)); 68 69 // 写法2-2 70 // char[] arrChar = str.toCharArray(); 71 // // 重新定义一个char类型的数组来接收 72 // char[] arrCharEx = new char[arrChar.length]; 73 // 74 // // 从第1个字符到最后一个字符(先都拿出来判断),如果是大写字符,转换为小写字符, 75 // // 因为拿出来的是一个一个的char类型的元素,判断后发生变化的元素自身,然后放入新的数组中 76 // int i = 0; 77 // for (char item : arrChar) { 78 // if (item >= 'A' && item <= 'Z') { 79 // // 大写字符转换为小写字符 80 // item += 32; 81 // } 82 // 83 // arrCharEx[i] = item; 84 // i++; 85 // } 86 // 87 // // 首字符判断,如果是小写字符转换为大写字符 88 // if (arrCharEx[0] >= 'a' && arrCharEx[0] <= 'z') { // 首字符 89 // // 小写字符转换为大写字符 90 // arrCharEx[0] -= 32; 91 // } 92 // 93 // System.out.println("转换后的字符串为:" + String.valueOf(arrCharEx)); 94 95 // 写法2-3 96 // char[] arrChar = str.toCharArray(); 97 // 98 // // 从第1个字符到最后一个字符(先都拿出来判断),如果是大写字符,转换为小写字符, 99 // // 因为拿出来的是一个一个的char类型的元素,判断后发生变化的元素自身,再放入原数组中100 // int i = 0;101 // for (char item : arrChar) {102 // if (item >= 'A' && item <= 'Z') {103 // // 大写字符转换为小写字符104 // item += 32;105 // }106 // 107 // arrChar[i] = item;108 // i++;109 // }110 // 111 // // 首字符判断,如果是小写字符转换为大写字符112 // if (arrChar[0] >= 'a' && arrChar[0] <= 'z') { // 首字符113 // // 小写字符转换为大写字符114 // arrChar[0] -= 32;115 // }116 // 117 // System.out.println("转换后的字符串为:" + String.valueOf(arrChar));118 119 // 思路3:120 // 1、得到字符串121 // 2、首字符----->子字符串变为大写122 // 3、其他字符----->子字符串变为小写123 // 4、拼接两个子字符串124 125 // String string1 = str.substring(0, 1).toUpperCase();126 // String string2 = str.substring(1).toLowerCase();127 // System.out.println("转换后的字符串为:" + string1.concat(string2));128 129 // 思路4:(链式编程)130 // 1、得到字符串131 // 2、字符串全部变为小写132 // 3、字符串首字符变成大写133 // 下面两种写法等价134 // System.out.println("转换后的字符串为:" + str.substring(0, 1).toUpperCase().concat(str.substring(1).toLowerCase()));135 System.out.println("转换后的字符串为:" + str.toLowerCase().substring(0, 1).toUpperCase().concat(str.substring(1).toLowerCase()));136 }137 }
1 package cn.temptation; 2 3 public class Sample17 { 4 public static void main(String[] args) { 5 /* 6 * String类的常用成员方法:(具有替换功能) 7 * 1、String replace(char oldChar, char newChar) :返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 8 * 2、String replace(CharSequence target, CharSequence replacement) :使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 9 */10 String string1 = "luck";11 System.out.println(string1.replace('l', 'f')); // fuck12 System.out.println(string1); // luck13 14 String string2 = "feel";15 System.out.println(string2.replace('e', 'o')); // fool16 17 String string3 = "food";18 System.out.println(string3.replace('e', 'a')); // food19 // 拿着第一个参数字符去查找,找到了就替换,找不到就不替换20 System.out.println("--------------------------------------------------");21 22 System.out.println(string1.replace("lu", "clo")); // clock23 System.out.println(string1); // luck24 25 // 注意:replace(...)方法替换后得到的是一个新的字符串,原字符串不变26 }27 }
1 package cn.temptation; 2 3 public class Sample18 { 4 public static void main(String[] args) { 5 /* 6 * String类的常用成员方法:(其他功能) 7 * 1、String trim() :返回字符串的副本,忽略前导空白和尾部空白。 8 * 2、int compareTo(String anotherString) :按字典顺序比较两个字符串。 9 * 3、int compareToIgnoreCase(String str) :按字典顺序比较两个字符串,不考虑大小写。 10 */11 String string1 = " java temptation ";12 System.out.println("string1:" + string1 + ",length:" + string1.length()); // string1: java temptation ,length:1713 System.out.println("string1.trim():" + string1.trim() + ",length:" + string1.trim().length()); // string1.trim():java temptation,length:1514 System.out.println(string1.trim() + " is good"); // java temptation is good15 System.out.println("-----------------------------------------------");16 17 String string2 = "java";18 String string3 = "java";19 String string4 = "php";20 String string5 = "japan";21 22 System.out.println(string2.compareTo(string3)); // 023 System.out.println(string2.compareTo(string4)); // -6 j - p24 System.out.println(string2.compareTo(string5)); // 6 v - p25 26 String string6 = "java";27 String string7 = "ja";28 String string8 = "jav";29 String string9 = "j";30 31 System.out.println(string6.compareTo(string7)); // 232 System.out.println(string6.compareTo(string8)); // 133 System.out.println(string6.compareTo(string9)); // 334 System.out.println("-----------------------------------------------");35 36 String string10 = "java";37 String string11 = "javA";38 39 System.out.println(string10.compareTo(string11)); // 32 97 - 6540 System.out.println(string10.compareToIgnoreCase(string11)); // 041 }42 }
1 package cn.temptation; 2 3 public class Sample19 { 4 public static void main(String[] args) { 5 // 需求:把数组的内容按照一定的格式组成一个字符串 6 // 例如:int[] arr = { 3, 5, 7, 9 }; -----> 字符串"[3, 5, 7, 9]" 7 8 // 数组的内容(元素)的数据类型未知,考虑转换为Object类型 9 // int[] arr = { 3, 5, 7, 9 };10 // double[] arr = { 3.14, 5.26, 7.38 };11 boolean[] arr = { true, false, false, true };12 13 // 转换为Object数组14 Object[] arrObj = new Object[arr.length];15 16 for (int i = 0; i < arr.length; i++) {17 arrObj[i] = arr[i];18 }19 20 System.out.println(arrayToString(arrObj));21 }22 23 /**24 * 数组转字符串25 * @param arr26 * @return27 */28 public static String arrayToString(Object[] arr) {29 String result = "[";30 31 for (int i = 0; i < arr.length; i++) {32 if (i == arr.length - 1) {33 result += arr[i] + "]";34 } else {35 result += arr[i] + ",";36 }37 }38 39 return result;40 }41 }
1 package cn.temptation; 2 3 import java.util.Scanner; 4 5 public class Sample20 { 6 public static void main(String[] args) { 7 // 需求:通过键盘录入一个字符串,实现其反转 8 // 例如:"abcd" -----> "dcba" 9 String str = "";10 11 System.out.println("输入一个字符串:");12 Scanner input = new Scanner(System.in);13 if (input.hasNextLine()) {14 str = input.nextLine();15 } else {16 System.out.println("输入的格式不正确!");17 }18 input.close();19 20 // 思路1:21 // 1、获取录入的字符串22 // 2、将其转换为字符数组23 // 3、循环从字符数组的最后一个开始取出字符,再拼接为一个字符串输出24 25 // 写法1:26 // char[] arrChar = str.toCharArray();27 // String strTemp = "";28 // for (int i = arrChar.length - 1; i >= 0; i--) {29 // strTemp += arrChar[i];30 // }31 // System.out.println("反转后,字符串为:" + strTemp);32 33 // 思路2:34 // 1、获取录入的字符串35 // 2、通过charAt(...)取得每一个字符36 // 3、通过反序拼接为一个字符串输出37 38 // 写法2:39 // String strTemp = "";40 // for (int i = str.length() - 1; i >= 0; i--) {41 // char temp = str.charAt(i);42 // strTemp = strTemp.concat(str.valueOf(temp));43 // }44 // System.out.println("反转后,字符串为:" + strTemp);45 46 // 思路3:47 // 1、获取录入的字符串48 // 2、将其转换为字符数组49 // 3、首尾对调,第2个位置和倒数第2个位置对调,....直到中间50 // 4、对调后的结果再转换为字符串输出51 52 // 写法3:53 char[] arrChar = str.toCharArray();54 for (int i = 0; i < str.length() / 2; i++) {55 // 对调56 char temp = arrChar[i];57 arrChar[i] = arrChar[str.length() - 1 - i];58 arrChar[str.length() - 1 - i] = temp;59 }60 System.out.println("反转后,字符串为:" + String.valueOf(arrChar));61 }62 }
1 package cn.temptation; 2 3 public class Sample21 { 4 public static void main(String[] args) { 5 // 需求:从字符串"javagoodjavabetterjavabestjavaamazing"中统计"java"出现的次数 6 7 // String str = "javagoodjavabetterjavabestjavaamazing"; 8 // String str = "javajavajava"; 9 // String strTemp = "java"; 10 11 String str = "lolol"; 12 String strTemp = "lol"; 13 14 // 声明出现次数变量 15 int apperCount = 0; 16 17 // 思路1:(反复使用indexOf方法和substring方法) 18 // 1、对原字符串使用indexOf(子字符串):如果没有的话,返回-1 19 // 2、第1次出现:"|java|goodjavabetterjavabestjavaamazing",根据出现的位置做截取,形成新的字符串"goodjavabetterjavabestjavaamazing" 20 // 3、第2次出现:"good|java|betterjavabestjavaamazing",根据出现的位置做截取,形成新的字符串"betterjavabestjavaamazing"... 21 // 4、重复上述操作,直到返回-1 22 23 // 写法1: 24 // while (str.indexOf(strTemp) != -1) { 25 // // 找到一次子字符串,就自增一下 26 // apperCount++; 27 // 28 // // 以查找的字符串出现的索引位置 + 查找的字符串的长度 作为substring方法的beginIndex参数的值,用来做字符串的截取 29 // int beginIndex = str.indexOf(strTemp) + strTemp.length(); 30 // str = str.substring(beginIndex); 31 // } 32 // 33 // System.out.println("原字符串中查找字符串:" + strTemp + "出现的次数为:" + apperCount); 34 35 // 思路2:(反复使用charAt) 36 // 1、反复使用charAt组合出j、a、v、a进行比较 37 // 2、有满足条件的做累加 38 39 // 写法2: 40 for (int i = 0; i < str.length() - strTemp.length() + 1; i++) { 41 // if (str.charAt(i) == 'j' && str.charAt(i + 1) == 'a' && str.charAt(i + 2) == 'v' && str.charAt(i + 3) == 'a') { 42 // apperCount++; 43 // } 44 45 // if (str.charAt(i) == 'l' && str.charAt(i + 1) == 'o' && str.charAt(i + 2) == 'l') { 46 // apperCount++; 47 // } 48 49 // 功能实现后,重新审视,觉得写的不太好,因为硬编码 50 // 另外还要思考一个问题:1、"javajavajava";2、从"lolol"查找"lol" 51 52 // 变形1 53 // if (str.charAt(i + 0) == 'j') { 54 // if (str.charAt(i + 1) == 'a') { 55 // if (str.charAt(i + 2) == 'v') { 56 // if (str.charAt(i + 3) == 'a') { 57 // apperCount++; 58 // } 59 // } 60 // } 61 // } 62 63 // 变形2 64 // if (str.charAt(i + 0) == strTemp.charAt(0)) { 65 // if (str.charAt(i + 1) == strTemp.charAt(1)) { 66 // if (str.charAt(i + 2) == strTemp.charAt(2)) { 67 // if (str.charAt(i + 3) == strTemp.charAt(3)) { 68 // apperCount++; 69 // } 70 // } 71 // } 72 // } 73 74 // 变形3 75 // 声明判断标识 76 // boolean flag = true; 77 // if (str.charAt(i + 0) != strTemp.charAt(0)) { 78 // flag = false; 79 // } 80 // if (str.charAt(i + 1) != strTemp.charAt(1)) { 81 // flag = false; 82 // } 83 // if (str.charAt(i + 2) != strTemp.charAt(2)) { 84 // flag = false; 85 // } 86 // if (str.charAt(i + 3) != strTemp.charAt(3)) { 87 // flag = false; 88 // } 89 // if (flag) { 90 // apperCount++; 91 // } 92 93 // 变形4 94 boolean flag = true; 95 for (int j = 0; j < strTemp.length(); j++) { 96 if (str.charAt(i + j) != strTemp.charAt(j)) { 97 flag = false; 98 } 99 }100 if (flag) {101 apperCount++;102 }103 }104 105 System.out.println("原字符串中查找字符串:" + strTemp + "出现的次数为:" + apperCount);106 }107 }