day08-String-StringBuilder
2020-01-15 11:49
2471 查看
API概述
应用程序接口;(简单记就是关于java中已经写好的一些类的说明书或一本关于java编写的类的字典) API作用 程序员通过查询api可以知道如何使用java中已经提前写好的类和方法;
String类
概述
java编写的类,在java.lang包下,使用时无需导包;
作用
String类代表程序中所有字符串类型的数据,里面提供了很多关于字符串操作的成员方法,我们可以使用这些方法处理字符串;
创建方式
1:构造方法(以后用的到,现阶段用的少) 1:空参数构造方法 2:参数是字节数组 3:参数是字符数组 2:双引号直接写 一直很常用,且使用双引号创建的字符串对象,在常量池中,同一个字符串对象,在常量池中仅会存在一份;
常用方法
1:比较的方法 equals严格比较; equalsIgnoreCase 忽略大小写比较 2:遍历字符串的方法 length() 获取字符串长度 charAt(索引) 获取指定索引处的字符
特点(非常重要,必须记住)
1:使用双引号创建出来的字符串对象是常量,可以被多个变量共享使用; 2:字符串中所有的方法,都不会改变原字符串的值,方法执行后会得到一个新的字符串对象;
StringBuilder类
概念
StringBuilder代表字符串缓冲区
作用
用于拼接字符串的时候,提升程序的性能,减少字符串拼接过程中产生的字符串常量垃圾;
构造方法
1:空参数构造方法 2:带字符串参数的构造方法
常用方法
1: append (任意数据) 2:toString() 将缓冲区变成字符串 3:reverse() 反转内容
String与StringBuilder的转换
1:使用StringBuilder的toString方法,可以将字符串缓冲区转成字符串对象; 2:使用StringBuilder的构造方法,可以将字符串对象转成字符串缓冲区对象;
String与StringBuilder的区别
1:字符串内容不可改变; 2:字符串缓冲区内容可以改变; 3:StringBuilder的优势: 有reverse方法,可以对内容反转,而字符串中没有这个方法 使用append方法对字符串拼接的过程中不会产生垃圾常量,性能高;
import java.util.Scanner; /* 需求: 演示键盘输入字符串的两种方式,及区别; 1:next() 方法,可以输入字符串 2:nextLine() 方法,也可以输入字符串 区别: 1:next() 方法,可以与其他的方法混合使用;而nextLine() 方法,只能和nextLine() 方法一起使用,不能喝其他方法混合使用; 2:nextLine() 方法可以输入空格,而next() 方法不能输入空格; */ public class ScannerDemo { public static void main(String[] args) { //1:创建对象; Scanner sc = new Scanner(System.in); //2:面向对象,调用方法 System.out.println("请输入整数:"); int i = sc.nextInt(); System.out.println("整数是:"+i); //3:输入字符串 System.out.println("请输入字符串"); //String s = sc.next(); sc.nextLine();//如果一定要混合使用,需要连续写两次,第二次才会让程序停下来,完成键盘输入 String s = sc.nextLine(); System.out.println("字符串是:"+s); } }
import java.util.Scanner; /* 模拟用户登录的案例, 循环的时候,使用 i-- 提示的时候,明确提示用户名错误,或密码错误 */ public class UserLogin { public static void main(String[] args) { //1:设置用户名和密码 String un = "abc"; String pw = "abc"; //2:循环3次,让用户登录 Scanner sc = new Scanner(System.in); for (int i = 2; i >=0 ; i--) { System.out.println("请输入您的大名:"); String name = sc.next(); System.out.println("请输入您的密码:"); String password = sc.next(); //3:先比用户名,如果正确,再比密码,如果错误,直接提示用户名错误 if(un.equals(name)){ //说明用户名正确,继续比较密码 if(pw.equals(password)){ //正确 System.out.println("噢啦!成功啦!"); break; }else { //如果错误,直接提示密码错误 if(i==0){ System.out.println("别乱来,没机会了!"); }else { System.out.println("密码不对呀!您还有:"+i+"次机会"); } } }else { //如果错误,直接提示用户名错误 if(i==0){ System.out.println("别乱来,没机会了!"); }else { System.out.println("用户名不存在!您还有:"+i+"次机会"); } } } } }
/* 演示字符串中的其他常用方法, 注意: 字符串中的任意一个方法,都不会改变老字符串的值; */ public class StringDemo { public static void main(String[] args) { String s = "abcDefGh"; String s1 = s.toUpperCase(); System.out.println("s="+s); System.out.println("s1="+s1); String s2 = "abcjavaabcjavaabc"; //将所有的abc替换成Android String s3 = s2.replaceAll("abc", "Android"); System.out.println("s2="+s2); System.out.println("s3="+s3); } }
import java.util.Scanner; /* 演示调用方法后,自动使用变量接受结果 有三种方式: 1:快捷键: ctrl + alt +v 2:直接在后面写 .var 回车 3: alt+enter */ public class ScannerDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); //int i = sc.nextInt(); int i = sc.nextInt(); int i1 = sc.nextInt(); int i2 = sc.nextInt(); int i3 = sc.nextInt(); } }
/* 字符串比较 */ public class StringDemo { public static void main(String[] args) { //1:使用各种方式创建多个字符串对象 String s1="abcd";// 在常量池中 String s2=new String("abcd");// 在堆内存中 String s3="AbCd";// 在常量池中 //2:分别使用equals equalsIgnoreCase比较 System.out.println(s1.equals(s2));// true System.out.println(s1.equals(s3));// false System.out.println(s1.equalsIgnoreCase(s2));// true System.out.println(s1.equalsIgnoreCase(s3));// true } }
/* String常用方法扩展: 1: 切分字符串 split(短字符串) 2: 截取字符串中的一部分 substring(起始索引); 从指定位置,截取到末尾(含头含尾) substring(起始索引),结束索引; 从指定位置到结束索引位置;留头不留尾 3:替换字符串中指定的内容 replaceAll("老字符串中的元素","替换后的字符串元素"); 结论: 字符串中所有的方法,都不会改变原字符串的值,运算后会得到一个新的字符串对象,必须使用新的字符串对象才能看到运算的效果; */ public class StringKuoZhan { public static void main(String[] args) { //1:长字符串 String s="javaabcjavaabcdjava"; //2:使用java对s变量进行切分 String[] arr = s.split("java");// 切分的时候,留头不留尾 System.out.println(arr.length);// 长度为3 //3:查看数组中的元素 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+"\t"); } System.out.println(); //3:练习字符串截取 System.out.println("-------------------------"); String s2="abcdefgh"; //取出def System.out.println(s2.substring(3, 6)); //取出defgh System.out.println(s2.substring(3)); System.out.println("========================"); //将下面字符串中的aaa替换成java String s3="abcaaadddaaahhhaaa"; System.out.println(s3.replaceAll("aaa", "java")); System.out.println("***************************"); System.out.println(s); System.out.println(s2); System.out.println(s3); } }
import java.util.Scanner; /* 需求: 使用键盘输入两个字符串;(一大一小),使用代码计算出小字符串在大字符串中出现的次数; 分析: 1:使用Scanner完成键盘输入字符串的功能; 2:使用String类中的replaceAll方法,将大字符串中出现的小字符串替换为长度为0的字符串; 3:使用原来字符串的长度-减去替换后的字符串的长度,然后使用差值除以小字符串的长度即可; */ public class StringKuoZhan2 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("亲,请输入一个长字符串:"); String da = sc.next(); System.out.println("亲,请输入一个短字符串:"); String xiao = sc.next(); // 2:使用String类中的replaceAll方法,将大字符串中出现的小字符串替换为长度为0的字符串; String xin = da.replaceAll(xiao, ""); // 3:使用原来字符串的长度-减去替换后的字符串的长度,然后使用差值除以小字符串的长度即可; int i = (da.length() - xin.length()) / xiao.length(); System.out.println(xiao+" 在 "+da+" 中一共出现了:"+i+"次!"); } }
import java.util.Random; /* 随机生成一个四个字符的字符串验证码 思路: 1:使用随机数生成范围在 97--122之间的数字 2:使用for循环,循环四次,每次生成一个随机数字,将数字强制转成char类型, 3:使用字符串拼接, */ public class CodeDemo { public static void main(String[] args) { //1:使用随机数生成范围在 97--122之间的数字 Random r=new Random(); String s=""; //2:使用for循环,循环四次,每次生成一个随机数字,将数字强制转成char类型, for (int i = 0; i <4 ; i++) { int i1 = r.nextInt(122 - 97 + 1) + 97; s+=(char)i1; } System.out.println(s); } }
分析以下需求,并用代码实现
1.定义String getStr()方法 功能描述: 获取长度为5的随机字符串,字符串由随机的5个大小写字母组成 2.在main方法中调用上述方法,并打印结果
/*大写:65-90 小写:97-122*/ import java.util.Random; public class randomStr { public static void main(String[] args) { //调用方法 String str = getStr(); //输出 System.out.println(str); } public static String getStr() { //构造StringBuilder对象 StringBuilder sb = new StringBuilder(); Random r = new Random(); while (true) { if (sb.length() == 5) { //控制字符串长度为5 break; } else { //随机生成65-122的随机数 int a = r.nextInt(58) + 65; //判断生成的随机数在不在大写和小写字母范围内 if ((a >= 65 && a <= 90) || (a >= 97 && a <= 122)) { //将数字转换成相应的字母 char cc = (char) a; //然后将字符添加到sb中 sb.append(cc); } else { continue; } } } String s = sb.toString(); return s; } }
分析以下需求,并用代码实现
1.键盘录入一个字符串 2.将该字符串变成字符数组(不能使用toCharArray()方法) 3.将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase()方法) 4.如果第一位和最后一位的内容不相同,则交换 5.将字符数组中索引为偶数的元素变成'~' 6.打印数组元素的内容
public class StringToArray { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String line = sc.nextLine(); char[] ch = new char[line.length()]; //将该字符串变成字符数组(不能使用toCharArray()方法) StringToArray(line, ch); //打印数组 printArray(ch); //将字符数组中的所有大写字母变成小写字母(不能使用toLowerCase()方法) HighToLower(ch); //打印数组 printArray(ch); //如果第一位和最后一位的内容不相同,则交换 changeArray(ch); //打印数组 printArray(ch); //将字符数组中索引为偶数的元素变成'~' changeDouble(ch); //打印数组 printArray(ch); } public static void StringToArray(String line, char[] ch) { for (int i = 0; i < line.length(); i++) { ch[i] = line.charAt(i); } } public static void HighToLower(char[] ch) { for (int i = 0; i < ch.length; i++) { //首先判断是不是大写字母 //将字符转成对应的数字 int a = (int) ch[i]; if (a >= 65 && a <= 90) { //转换成小写字母对应的数字 a = a + 32; //把数字转换成小写字母并存入数组 ch[i] = (char) a; } else { //不是大写字母 continue; } } } public static void changeArray(char[] ch) { //如果最后一个元素和第一个不相同,就交换 if (ch[0] != ch[ch.length - 1]) { char temp = ch[0]; ch[0] = ch[ch.length - 1]; ch[ch.length - 1] = temp; } } public static void changeDouble(char[] ch) { //遍历数组,判读偶数位,将偶数位置元素更换为~ for (int i = 0; i < ch.length; i++) { if (i % 2 == 0) { ch[i] = '~'; } } } public static void printArray(char[] ch) { StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < ch.length; i++) { if (i == ch.length - 1) { sb.append(ch[i]); } else { sb.append(ch[i] + ", "); } } sb.append("]"); System.out.println(sb.toString()); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java中String、StringBuffer、StringBuilder区别
- String,StringBuffer与StringBuilder的差异
- String,StringBuffer与StringBuilder的区别??
- String、StringBuffer、StringBuilder
- C#中String与StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- 不可变String及可变StringBuilder
- String,StringBuilder,StringBuffer介绍
- String,StringBuffer与StringBuilder的区别??
- Java的String&StringBuffer&StringBuilder
- Java常考面试题7 深刻认识String、StringBuilder、StringBuffer
- String,StringBuffer与StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- String,StringBuffer与StringBuilder的区别
- Java:String、StringBuffer和StringBuilder的区别
- 黑马程序员--string和stringBuffe和stringBuilder
- string 与StringBuilder的区别
- C#中String与StringBuilder性能差异的原因详解
- String和StringBuilder
- 关于string,stringBuilder,stringBuffer