您的位置:首页 > 产品设计 > UI/UE

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());
}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
默契过多 发布了8 篇原创文章 · 获赞 0 · 访问量 39 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: