https://www.nowcoder.com/tutorial/94/ae05554a3ad84e42b6f9fc4d52859dc4

https://how2j.cn/k/number-string/number-string-wrap/22.html

目录

  • 1 封装类
    • 1.1 简单程序
    • 1.2 自动装箱
    • 1.3 自动拆箱
    • 1.4 练习
  • 2 字符串转换
    • 2.1 数字转字符串
    • 2.2 字符串转数字
  • 3 数学方法
    • 3.1 练习1
    • 3.2 练习2
  • 4 格式化输出
    • 4.1 %s %d %n
    • 4.2 长度,对齐
    • 4.3 练习
  • 5 字符
    • 5.1 赋值
    • 5.2 基本操作
    • 5.3 练习
  • 6 字符串
    • 6.1 创建
    • 6.2 继承、常量
    • 6.3 随机字符
    • 6.4 练习1
    • 6.5 练习2
  • 7 字符串操作
    • 7.1 获取
    • 7.2 转换 + 分隔
    • 7.3 查找 去除首尾空格 + 定位 + 替换
    • 7.4 练习1 - 每个单词首字母转大写
    • 7.5 练习2 - 统计p开头的单词
    • 7.6 练习3 - 间隔大写小写模式
    • 7.7 练习4 - 最后一个字母变大写
    • 7.8 练习5 - 最后一个two首字母大写
  • 8 比较字符串 string
    • 8.1 是否是一个对象
    • 8.2 内容是否相同
    • 8.3 是否以某字串开始、结束
    • 8.4 练习
  • 9 可变长字符串 stringBuffer
    • 9.1 操作
    • 9.2 长度、总空间
    • 9.3 练习1 - String、StringBuffer性能区别?
    • 9.4 练习2 - MyStringBuffer
      • 9.4.1 标准答案
  • 10 枚举类型
    • 10.1 遍历
    • 10.2 练习

1 封装类

基本类,如 int
对应 封装类 Integer

基本对象→对象
byte  Byte
short  Short  
int  Integer
long  Long
float  Float
double  Double
char  Character
boolean  Boolean

Number类是 Byte - Double的父类,是抽象类,不能直接实例化

Integer 常用方法:

Float 常用方法:

封装类作用:
1 用于集合存储
2 String 与 基本型 相互转换

1.1 简单程序

package 第2个程序_数字与字符串.a1_封装类;public class testNumber {public static void main(String[] args) {int i1 = 5;Integer i2 = new Integer(i1);int i3 = i2.intValue();System.out.println(i1);System.out.println(i2);System.out.println(i3);}
}

1.2 自动装箱

装箱:‘=’ 自动把 基本类型 转换为 类类型
Integer i3 = i1;// 自动装箱

package 第2个程序_数字与字符串.a2_自动装箱;public class TestNumber {public static void main(String[] args) {int i1 = 5;Integer i2 = new Integer(i1);Integer i3 = i1;// 自动装箱System.out.println(i1);System.out.println(i2);System.out.println(i3);}
}

1.3 自动拆箱

装箱:‘=’ 自动把 类类型 转换为 基本类型

 Integer it = new Integer(i);       //封装类型转换成基本类型int i2 = it.intValue();//自动转换就叫拆箱int i3 = it;
 //int的最大值System.out.println(Integer.MAX_VALUE);//int的最小值      System.out.println(Integer.MIN_VALUE);

1.4 练习

1 byte、short、float、double 自动拆箱、自动装箱
2 byte 和 Integer 之间能否自动拆箱、自动装箱
3 Byte 获取 byte 的最大值

package 第2个程序_数字与字符串.a1_封装类.练习;public class practice {public static void main(String[] args) {System.out.println("1 自动装箱、自动拆箱:");byte b1 = 1;Byte b2 = b1;byte b3 = b2;System.out.println(b1 + " " + b2 + " " + b3);short s1 = 2;Short s2 = s1;short s3 = s2;System.out.println(s1 + " " + s2 + " " + s3);float f1 = 3;Float f2 = f1;float f3 = f1;System.out.println(f1 + " " + f2 + " " + f3);double d1 = 4;Double d2 = d1;double d3 = d1;System.out.println(d1 + " " + d2 + " " + d3);System.out.println("2 byte 和 Integer 的自动拆箱、自动装箱:");
//        byte b = 1;
//        Integer i1 = b;
//        int i = 1;
//        byte b4 = i;int i = 1;byte b4 = (byte) i;System.out.println("3 Byte 获取 byte 的最大值:");System.out.println(Byte.MAX_VALUE);}
}

2 字符串转换

2.1 数字转字符串

package 第2个程序_数字与字符串.a2_字符串转换;// 数字转字符串
public class test1 {public static void main(String[] args) {int i= 4;//法1String s1 = String.valueOf(i);//法2Integer i2 = i;String s2 = i2.toString();System.out.println("s1 = " + s1);System.out.println("s2 = " + s2);}
}

2.2 字符串转数字

package 第2个程序_数字与字符串.a2_字符串转换;// 字符串转数字
public class test2 {public static void main(String[] args) {String s1 = "123";int i = Integer.parseInt(s1);System.out.println("i = " + i);}
}

3 数学方法

package 第2个程序_数字与字符串.a3_数学方法;public class TestNumber {public static void main(String[] args) {float f1 = 3.4f;float f2 = 3.5f;//Math.round 四舍五入System.out.println("1_Math.round 四舍五入:");System.out.println(Math.round(f1));System.out.println(Math.round(f2));System.out.println("\n2_Math.random() 0-1 浮点随机数:");System.out.println(Math.random());System.out.println("Math.random()*10 0-10 浮点随机数:");System.out.println(Math.random()*10);System.out.println("\n3_Math.random() 开方:");System.out.println("9 开方" + Math.sqrt(9));System.out.println("Math.random() 3的3次方:");System.out.println("3^3 = " + Math.pow(3,3));System.out.println("\n4_圆周率:");System.out.println("圆周率 = " + Math.PI);System.out.println("\n5_自然常数e:");System.out.println("自然常数e = " + Math.E);}
}

3.1 练习1

自己求自然常数

package 第2个程序_数字与字符串.a3_数学方法.练习;public class test1 {public static void main(String[] args) {int n = 1000000;double s = Math.pow(1+(1.0)*1/n,n);System.out.println("e = " + Math.E);System.out.println("自己所求 = " + s);}
}

3.2 练习2

统计 1千万以内的质数有多少?

package 第2个程序_数字与字符串.a3_数学方法.练习;import java.util.Arrays;//统计质数
public class test2 {public void p1(int number){System.out.println("法1 - 暴力法:");long start = System.currentTimeMillis();int num = 0;for(int i = 2; i < number; i++){if(check(i))num++;}System.out.println("数量 = " + num);long end = System.currentTimeMillis();System.out.println("用时 = " + (end - start) + "ms");}public boolean check(int number){for(int i = 2; i <= Math.sqrt(number); i++){if(number%i == 0)return false;}return true;}public void p2(int number){long start = System.currentTimeMillis();System.out.println("\n法2 - 埃氏筛法:");int num = 0;boolean p[] = new boolean[number + 1];Arrays.fill(p,true);p[0] = p[1] = false;int sqrtNum = (int)Math.sqrt(number);for(int i = 2; i < sqrtNum; i++){for (int j = i*i; j < number; j += i){p[j] = false;}}for (int i = 2; i < number; i++) {if(p[i])num++;}System.out.println("数量 = " + num);long end = System.currentTimeMillis();System.out.println("用时 = " + (end - start) + "ms");}public static void main(String[] args) {new test2().p1(10000000);new test2().p2(10000000);}
}


暴力法太费时间!

4 格式化输出

4.1 %s %d %n

%s 字符串
%d 数字
%n 换行

package 第4个程序_格式化输出.a1_简单格式输出;import javax.print.DocFlavor;public class test {public static void main(String[] args) {String name = "盖伦";int kill = 8;String title = "超神";String sentence = name + " 连杀 " + kill + " 人,获得 " + title + " 称号";System.out.println(sentence);String sentenceFormat = "%s 连杀 %d 人,获得 %s 称号 %n";System.out.printf(sentenceFormat, name, kill, title);System.out.format(sentenceFormat, name, kill, title);}
}

4.2 长度,对齐

package 第4个程序_格式化输出.a2_长度对齐;import java.util.Locale;public class test {public static void main(String[] args) {int year = 2020;System.out.format("%d%n",year);System.out.format("%8d%n",year);System.out.format("%-8d%n",year);System.out.format("%08d%n",year);System.out.format("%,8d%n",year*10000);System.out.format("\n%.2f%n",Math.PI);System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);}
}

4.3 练习

Scanner 读取字符串数据,格式化输出下面

浙江温州最大皮革厂江南皮革厂倒闭了,王八蛋老板黄鹤吃喝嫖赌,欠下了3.5个亿,带着他的小姨子跑了!我们没有办法,拿着钱包抵工资!原价都是一百多、两百多、三百多的钱包,现在全部只卖二十块,统统只要二十块!黄鹤王八蛋,你不是人!我们辛辛苦苦给你干了大半年,你不发工资,你还我血汗钱,还我血汗钱!

double jine = sc.nextDouble();

package 第4个程序_格式化输出.a3_练习;import java.util.Scanner;public class test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入地名:");String diming = scanner.next();String gongsi = "互联网公司";String laoban  = "李彦宏";double qian = 1000;String canpin = "代码";String danwei  = "千";String format = "%s最大%s倒闭了,\n" +"王八蛋老板%s吃喝嫖赌,欠下了%.1f个亿,带着他的小姨子跑了!\n" +"我们没有办法,拿着钱包抵工资!\n" +"原价都是一%s多、两%s多、三%s多的%s,现在全部只卖二十块,统统只要二十块!\n" +"%s王八蛋,你不是人!我们辛辛苦苦给你干了大半年,你不发工资,你还我血汗钱,还我血汗钱!\n";System.out.format(format, diming, gongsi, laoban, qian, danwei, danwei, danwei, canpin, laoban);scanner.close();}
}

5 字符

5.1 赋值

package 第5个程序_字符.a1_简单程序;public class test {public static void main(String[] args) {char c1 = 's';Character c2 = c1;char c3 = c2;System.out.println("c1 = " + c1);System.out.println("c2 = " + c2);System.out.println("c3 = " + c3);}
}

5.2 基本操作

package 第5个程序_字符.a2_常用方法;public class test {public static void main(String[] args) {System.out.println("判断是否是字母:" + Character.isLetter('a'));System.out.println("判断是否是数字:" + Character.isDigit('a'));System.out.println("判断是否是空白:" + Character.isLetter(' '));System.out.println("判断是否大写:" + Character.isUpperCase('a'));System.out.println("判断是否小写:" + Character.isLowerCase('a'));System.out.println("转为大写:" + Character.toUpperCase('a'));System.out.println("转为小写:" + Character.toLowerCase('A'));String s1 = Character.toString('a');System.out.println("s1 = " + s1);}
}

5.3 练习

Scanner从控制台读字符串,把字符串转换为字符数组
筛选字符串中的大写字母、数字,并打印出来

package 第5个程序_字符.练习;import java.util.Scanner;public class test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入:");String string = scanner.nextLine();char[] cs = string.toCharArray();for(int i = 0; i < cs.length; i++){if(Character.isUpperCase(cs[i]) || Character.isDigit(cs[i])){System.out.print(cs[i]);}}}
}

6 字符串

6.1 创建

package 第6个程序_字符串.a1_创建;import javax.print.DocFlavor;public class test {public static void main(String[] args) {String name1 = "盖伦";String name2= new String("提莫");char[] name3 = new char[]{'金','克','斯'};String name4 = new String(name3);String name5 = name1 + name4;System.out.println(name1);System.out.println(name2);System.out.println(name3);System.out.println(name4);System.out.println(name5);}
}

6.2 继承、常量

String 被 final 修饰,不能被继承
错误:

static class MyString extends String{} //错误!

String 初始化赋值后,不能再修改! = 常量

长度:

 String name ="盖伦";System.out.println(name.length());

6.3 随机字符

0 - 9 : 48 - 57
A - Z : 65 - 90
a - z : 97 - 122

package 第6个程序_字符串.a2_随机字符;public class test {/*创建长度是5的随机字符串随机字符可能是 数字、大写字母、小写字母数字和字符之间可以通过互相转换char c = 'A';short s = (short) c;0-9:48-57A-Z:65-90a-z:97-122*/public void rand(int dight){char[] str = new char[dight];for (int i = 0; i < dight; i++){while(true){char t = (char)(Math.random()*(122-48+1)+48);if(Character.isLetterOrDigit(t)){str[i] = t;break;}}}System.out.println("随机字符生成成功!");System.out.printf("%d个随机字符:\n",dight);for(char c:str){System.out.printf("%c",c);}System.out.println();}public static void main(String[] args) {new test().rand(5);}
}

6.4 练习1

创建长度是 8 的字符串数组
用 8 个长度是 5 的随机字符串初始化这个数组
对数组排序,每个字符串 首字母排序(无视大小写)

注1: 不用 Arrays.sort() 要自己写
注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序

package 第6个程序_字符串.练习1;public class test {public String randstr(int dight){String string = "";while(string.length()<dight){char t = (char)(Math.random()*(122-48+1)+48);if(Character.isLetterOrDigit(t)){string += t;}}return string;}public void rand(int num, int dight ){String[] str = new String[num];for (int i = 0; i < num; i++) {str[i]=randstr(dight);}System.out.println("随机字符生成成功!");System.out.printf("%d个随机字符串(长度为%d):\n",num,dight);for(String c:str){System.out.printf("%s\n",c);}System.out.println("\n开始排序:");sort(str);}public void sort(String[] strings){int i, j;for (i = 1; i < strings.length; i++){String string = strings[i];for(j = i-1; j >= 0; j--){if(Character.toLowerCase(string.charAt(0))<Character.toLowerCase(strings[j].charAt(0))) {strings[j+1] = strings[j];}else {break;}}strings[j+1] = string;}System.out.println("排序完毕!");for(String string:strings){System.out.println(string);}}public static void main(String[] args) {new test().rand(8,5);}
}

6.5 练习2

1 生成长度是 3 的随机字符串,当做密码
2 穷举法生成长度是 3 的字符串,匹配上述生成的密码
要求: 用多层for循环 和 递归解决问题

package 第6个程序_字符串.练习1;import java.nio.charset.Charset;
import java.util.Arrays;//找密码
public class test2 {public String rand(int length){System.out.println("开始随机生成字符...");char[] str = new char[length + 1];int i;for ( i = 0; i < length; i++){while (true){char t = (char)(Math.random()*(122-48+1)+48);if(Character.isLetterOrDigit(t)){str[i] = t;break;}}}str[i] = '\0';System.out.println("完成!\n密码:");for(char c:str){System.out.printf("%c",c);}System.out.printf("\n\n");return String.valueOf(str);}public void trybreak(String string, int length){System.out.println("开始破译...");double start = System.currentTimeMillis();int i;char t;char[] password = new char[length];for (i = 0; i < length; i++){for(t = '0'; t <= 'z'; t++){if(t == string.charAt(i)){password[i] = t;}}}System.out.printf("密码:");for(char c:password){System.out.printf("%c",c);}System.out.println();double end = System.currentTimeMillis();System.out.println("用时:" + (end - start) + "ms");}public static void main(String[] args) {int length = 3;String string = new test2().rand(length);new test2().trybreak(string,length);}
}

7 字符串操作

7.1 获取

charAt
String str = new String(b, 3, 2);
String str = new String(b, 3, 2, "utf-8");
String str = new String( char[] c = { 'w', 'e', 'l', 'c', 'o', 'm', 'e' } );
str.substring(2, 10)
package 第7个程序_字符串操作.a1_获取相关字符;public class test {public static void main(String[] args) {String string = "你好啊我是太阳ajkl";System.out.println("string = " + string);char t = string.charAt(3);System.out.printf("t = %c\n",t);String string1 = string.substring(3);String string2 = string.substring(3,6);//左开右闭System.out.println("string1 = " + string1);System.out.println("string2 = " + string2);}
}

7.2 转换 + 分隔

package 第7个程序_字符串操作.a1_获取相关字符;//转为字符数组 + 分隔
public class test1 {public static void main(String[] args) {String string = "你好啊,我是太阳,ajkl";System.out.println("string = " + string + "\n");System.out.println("转成字符数组:");char[] t = string.toCharArray();System.out.printf("t = ");for(char c:t){System.out.printf("%c",c);}System.out.println("\n");System.out.println("分隔:");String[] string1 = string.split(",");for(String s:string1){System.out.println(s);}System.out.println("\n");}
}

7.3 查找 去除首尾空格 + 定位 + 替换

str.indexOf("个")
str.endsWith("员")
str.startsWith("明")
package 第7个程序_字符串操作.a1_获取相关字符;//去首位空格 + 定位
public class test2 {public static void main(String[] args) {String string = "  你 好啊,我是太阳,ajkl d";System.out.println("string = " + string);System.out.println("去首尾空格:");String string1 = string.trim();System.out.println("string1 = " + string1 + "\n");System.out.println("定位:");System.out.println("'你'第一次出现位置:" + string.indexOf('你'));System.out.println("'太阳'第一次出现的位置" + string.indexOf("太阳"));System.out.println("'d'最后一次出现位置:" + string.lastIndexOf("d"));System.out.println("位置3开始,','第一次出现在:" + string.indexOf(',',3));System.out.println("'太阳'是否在 string 中:" + string.contains("太阳") + "\n");System.out.println("替换:");//string = "  你 好啊,我是太阳,ajkl d";System.out.println("string = " + string);String string2 = string.replaceAll("太阳","派大星");//所有的太阳 都换成 派大星System.out.println("所有的太阳 都换成 派大星:");System.out.println("string2 = " + string2);System.out.println("空格 换成 '1':");string2 = string2.replaceAll(" ","1");System.out.println("string2 = " + string2);System.out.println("第一个'你'换成'呵':");string2 = string2.replaceFirst("你","呵");System.out.println("string2 = " + string2);}
}

7.4 练习1 - 每个单词首字母转大写

每个单词的首字母都转换为大写
“let there be light”,每个单词的首字母都转换为大写

package 第7个程序_字符串操作.练习;public class a1_单词首字母转大写 {public void change(String string){System.out.println("开始转换:");String[] string1 = string.split(" ");string = "";for(String string2:string1){string += (Character.toUpperCase(string2.charAt(0)) + string2.substring(1) + " ");}System.out.println("string = " + string);}public static void main(String[] args) {String string = "my name is hello!";new a1_单词首字母转大写().change(string);}
}

7.5 练习2 - 统计p开头的单词

英文绕口令
peter piper picked a peck of pickled peppers
统计这段绕口令有多少个以p开头的单词

package 第7个程序_字符串操作.练习;public class a2_统计p开头的单词 {public void tongji(String string){String[] strings = string.split(" ");int count = 0;for (String string1:strings){if(string1.charAt(0) == 'p'){count++;}}System.out.println("数量 = " + count);}public static void main(String[] args) {String string = "peter piper picked a peck of pickled peppers";new a2_统计p开头的单词().tongji(string);}
}

7.6 练习3 - 间隔大写小写模式

lengendary 改成间隔大写小写模式,即 LeNgEnDaRy

package 第7个程序_字符串操作.练习;public class a3_间隔大小写 {public void change(String string){System.out.println("string = " + string);System.out.println("开始转换:");String str = "";for (int i = 0; i < string.length(); i++){if(i%2==0)str += string.substring(i,i+1).toUpperCase();elsestr += string.substring(i,i+1).toLowerCase();}System.out.println("str = " + str);}public static void main(String[] args) {String string = "asdas";new a3_间隔大小写().change(string);}
}

7.7 练习4 - 最后一个字母变大写

package 第7个程序_字符串操作.练习;public class a4_最后字母大写 {public void change(String string){String str = string.substring(0,string.length()-1);str += Character.toUpperCase(string.charAt(string.length()-1));System.out.println("str = " + str);}public static void main(String[] args) {String string = "asd";new a4_最后字母大写().change(string);}
}

7.8 练习5 - 最后一个two首字母大写

package 第7个程序_字符串操作.练习;public class a5_最后一个two首字母大写 {public void change(String string){System.out.println("开始转换:");int i = string.lastIndexOf("two");String string1 = string.substring(0,i);string1 += string.substring(i,i+1).toUpperCase();string1 += string.substring(i+1,string.length());string = string1;System.out.println("转换结束\nstring = " + string + "\n");}public static void main(String[] args) {String string= "Nature has given us that two ears, two eyes, and but one tongue, to the end that we should hear and see more than we speak";new a5_最后一个two首字母大写().change(string);}
}

8 比较字符串 string

public class Str37 {public static void main(String[] args) {String s1 = new String("asd");String s2 = "asd";String s3 = s1;String s4 = new String("asd");String s5 = "asd";System.out.println(s1==s2); falseSystem.out.println(s1==s3); trueSystem.out.println(s1==s4); false System.out.println(s2==s5); true}
}

8.1 是否是一个对象

str1、str2 内容一样!
但 不是同一个字符串对象

package 第8个程序_比较字符串.a1_是否是一个对象;public class test {public static void main(String[] args) {String string1 = "asd";String string2 = new String(string1);System.out.println("是否相同:" + (string1==string2) + "\n");String string3 = "zxc";String string4 = "zxc";System.out.println("是否相同:" + (string3==string4) + "\n");}
}

8.2 内容是否相同

str1  ==  str2
str1.equals(str2) //完全一样返回true
str1.equalsIgnoreCase(str3) //忽略大小写

8.3 是否以某字串开始、结束

str1.startsWith(start)
str1.endsWith(end)

8.4 练习

创建长度100 字符串数组
长度是 2 的随机字符填充该字符串数组
统计字符串数组 重复的字符串有多少种

package 第8个程序_比较字符串.练习;public class test {public String rand(int length){String string = "";for (int i = 0; i < length; i++){string += (char)(Math.random()*(122-48+1)+48);}return string;}public boolean cunzai(String string, int pos, String[] strings, String[] strings2){int flag = 0;for (int i = pos + 1; i < strings.length; i++){if(strings[i].equals(string)){flag = 1;break;}}if(flag == 1){int j;for(j = 0; strings2[j]!=null; j++){if(strings2[j].equals(string)){return false;}}strings2[j] = string;return true;}elsereturn false;}public void tongji(String[] strings){int i, j, count = 0;String[] strings2 = new String[strings.length];for(i = 0; i < strings.length; i++){if(cunzai(strings[i],i,strings,strings2))count++;}System.out.println("重复数 = " + count);for (i = 0; strings2[i] != null;i++){System.out.println(strings2[i]);}}public void init(int length,int length2){System.out.println("开始初始化...");String[] strings = new String[length];for (int i = 0; i < length; i++){strings[i] = new test().rand(length2);}System.out.println("初始化成功!");int i = 1;for (String string:strings){System.out.printf("%-2d:%s  ",i ,string);if(i%5==0)System.out.println();i++;}new test().tongji(strings);}public static void main(String[] args) {int length = 100,length2 = 2;new test().init(length,length2);}
}

9 可变长字符串 stringBuffer

9.1 操作

增、删、反转、改

package 第9个程序_可变字符串.a1_StringBuffer操作;public class test {public static void main(String[] args) {String string = "asdxcv afd";StringBuffer stringBuffer = new StringBuffer(string);System.out.println("stringBuffer = " + stringBuffer);stringBuffer.append("okok!");System.out.println("增(尾): stringBuffer = " + stringBuffer);stringBuffer.insert(1,"你好");System.out.println("插(中间): stringBuffer = " + stringBuffer);stringBuffer.delete(1,2);System.out.println("删: stringBuffer = " + stringBuffer);stringBuffer.reverse();System.out.println("反转(转置): stringBuffer = " + stringBuffer);sb.setCharAt(0, '张');}
}

9.2 长度、总空间

package 第9个程序_可变字符串.a2_长度可变化;public class test {public static void main(String[] args) {String string = "the";StringBuffer stringBuffer = new StringBuffer(string);System.out.println("stringBuffer = " + stringBuffer);System.out.println("内容长度 = " + stringBuffer.length());System.out.println("总空间 = " + stringBuffer.capacity());}
}

9.3 练习1 - String、StringBuffer性能区别?

生成长度10的随机字符串
先用 String+,连接 10000 个随机字符串,计算用时
再用 StringBuffer 连接 10000 个随机字符串,计算用时

package 第9个程序_可变字符串.练习;// string + VS stringBuffer.append
public class test1 {public String rand(int length){String string = "";for (int i = 0; i < length; i++){string += (char)(Math.random()*(122-48+1)+48);}return string;}public void jia(int length1, int length2){System.out.println("string + 开始");double start = System.currentTimeMillis();String string = "";for(int i = 0; i < length1; i++){string += rand(length2);}double end = System.currentTimeMillis();System.out.println("用时 = " + (end - start) + "ms\n");}public void buffer(int length1, int length2){System.out.println("stringBuffer.append 开始");double start = System.currentTimeMillis();StringBuffer stringBuffer = new StringBuffer("");for(int i = 0; i < length1; i++){stringBuffer.append(rand(length2));}double end = System.currentTimeMillis();System.out.println("用时 = " + (end - start) + "ms");}public static void main(String[] args) {int length1 = 10000,length2 = 10;new test1().jia(length1,length2);new test1().buffer(length1,length2);}
}

9.4 练习2 - MyStringBuffer

根据接口 IStringBuffer ,自己做一个MyStringBuffer

package character;public interface IStringBuffer {public void append(String str); //追加字符串public void append(char c);  //追加字符public void insert(int pos,char b); //指定位置插入字符public void insert(int pos,String b); //指定位置插入字符串public void delete(int start); //从开始位置删除剩下的public void delete(int start,int end); //从开始位置删除结束位置-1public void reverse(); //反转public int length(); //返回长度
}

主程序:

package 第6个程序_字符串.a2_随机字符;public class MyStringBuffer implements IStringBuffer{String string;public MyStringBuffer(String string){this.string = string;}public String tostring(){System.out.println("string = " + this.string + "\n");return this.string;}@Overridepublic void append(String str) {System.out.println("末尾加字符串 " + str + ":");this.string += str;System.out.println("string = " + this.string + "\n");}@Overridepublic void append(char c) {System.out.println("末尾加单个字符 " + c + ":");this.string += c;System.out.println("string = " + this.string + "\n");}@Overridepublic void insert(int pos, char b) {System.out.println("在" + pos + "处, 插入单个字符 " + b + ":");if(pos >= 0 && pos < 10){String string1 = this.string.substring(0,pos);string1 += Character.toString(b);string1 += this.string.substring(pos,new MyStringBuffer(string).length());this.string = string1;}elseSystem.out.println("参数有问题!");System.out.println("string = " + this.string + "\n");}@Overridepublic void insert(int pos, String b) {System.out.println("在" + pos + "处, 插入字符串 " + b + ":");String string1 = this.string.substring(0,pos);string1 += b;string1 += this.string.substring(pos,new MyStringBuffer(string).length());this.string = string1;System.out.println("string = " + this.string + "\n");}@Overridepublic void delete(int start) {System.out.println("删除 从位置" + start + "以后的字符串(包括位置" + start + ") :");if((start >= 0) && (start < new MyStringBuffer(string).length()))this.string = this.string.substring(0,start);elseSystem.out.println("参数有问题!");System.out.println("string = " + this.string + "\n");}@Override//从开始位置删除剩下的public void delete(int start, int end) {System.out.println("删除 从位置" + start + "到 位置" + end + "处的字符串[" + start + "," + end + "):");String string1;if((start >= 0) && (start <= end) && (end < new MyStringBuffer(this.string).length())){string1 = this.string.substring(0,start);if (start < end)string1 += this.string.substring(end, new MyStringBuffer(this.string).length());elsestring1 += this.string.substring(end+1, new MyStringBuffer(this.string).length());this.string = string1;}elseSystem.out.println("参数有问题!");System.out.println("string = " + this.string + "\n");}@Overridepublic void reverse() {System.out.println("转置:");char[] str = this.string.toCharArray();for(int i = 0; i < str.length/2; i++){char t = str[i];str[i] = str[str.length-1-i];str[str.length-1-i] = t;}this.string = new String(str);System.out.println("string  = " + this.string + "\n");}@Overridepublic int length() {return this.string.length();}public static void main(String[] args) {MyStringBuffer myStringBuffer = new MyStringBuffer("12345678");System.out.println("string = " + myStringBuffer.string + "\n");myStringBuffer.append("zxc");myStringBuffer.append('d');myStringBuffer.insert(1,'p');myStringBuffer.insert(1,"890");myStringBuffer.delete(8);myStringBuffer.delete(4,6);myStringBuffer.reverse();}
}

9.4.1 标准答案

插入、删除,写一次主代码就行了
其他功能可以直接调用

package 第6个程序_字符串.a2_随机字符;public class MyStringBuffer1 implements IStringBuffer{int capacity = 16;int length = 0;char[] value;public MyStringBuffer1(){value = new char[capacity];}public MyStringBuffer1(String string){if(string != null){value = string.toCharArray();}length = value.length;if(capacity<value.length){capacity = value.length*2;}}public void print(char[] value){System.out.printf("string = ");for (int i = 0; i < length; i++){System.out.printf("%c",value[i]);}System.out.println("\n");}@Overridepublic void append(String str) {insert(length,str);}@Overridepublic void append(char c) {insert(length, Character.toString(c));}@Overridepublic void insert(int pos, char b) {insert(pos,Character.toString(b));}@Overridepublic void insert(int pos, String b) {System.out.println("在位置" + pos + "处, 插入字符串 " + b + ":");if((pos>=0) && (pos<=length) &&(b!=null)){while(capacity < (length+b.length()) ){capacity = (int)((length+b.length())*1.5f);}char[] newValue = new char[capacity];System.arraycopy(value,0, newValue,0, length);char[] cs = b.toCharArray();// newValue 从位置pos-末尾,同时向后移动 lengthSystem.arraycopy(newValue,pos, newValue,pos+cs.length, length-pos);// 将cs 放进newValue 的位置pos-(pos+cs.length)System.arraycopy(cs,0, newValue, pos , cs.length);value = newValue;length += cs.length;print(value);} else {System.out.println("参数有问题!" + "\n");}}@Overridepublic void delete(int start) {delete(start,length-1);}@Overridepublic void delete(int start, int end) {System.out.println("删除 位置" + start + "到" + (end-1) + "处 的字符串 :");if((start>=0) && (start<end) && (end<=length)){System.arraycopy(value,end, value,start,length-end);length -= (end-start);print(value);}else {System.out.println("参数有问题!");}}@Overridepublic void reverse() {System.out.println("转置:");for (int i = 0; i<length/2; i++){char temp = value[i];value[i] = value[length-1-i];value[length-1-i] = temp;}print(value);}@Overridepublic int length() {return length;}public static void main(String[] args) {String string = "123456789";char[] string1 = string.toCharArray();MyStringBuffer1 myStringBuffer = new MyStringBuffer1(string);myStringBuffer.print(string1);myStringBuffer.append("zxc");myStringBuffer.append('d');myStringBuffer.insert(1,'p');myStringBuffer.insert(3,"890sad");myStringBuffer.delete(8);myStringBuffer.delete(4,6);myStringBuffer.reverse();}
}

10 枚举类型

package 第1个程序.a10_枚举;public enum Season {spring,summer,autumn,winter
}
package 第1个程序.a10_枚举;public class test {public static void main(String[] args) {Season season = Season.spring;switch (season){case spring:System.out.println("春天");break;case summer:System.out.println("夏天");break;case autumn:System.out.println("秋天");break;case winter:System.out.println("冬天");break;}}
}

10.1 遍历

package 第1个程序.a10_枚举;public class all_read {public static void main(String[] args) {for (Season s : Season.values()) {System.out.println(s);}}
}

10.2 练习

package 第1个程序.a10_枚举.练习;public class test {public static void main(String[] args) {HeroType heroType = HeroType.ASSASSIN;switch (heroType){case TANK:System.out.println("坦克");break;case WIZARD:System.out.println("法师");break;case ASSASSIN:System.out.println("刺客");break;case ASSIST:System.out.println("辅助");break;case WARRIOR:System.out.println("近战");break;case RANGED:System.out.println("远程");break;case PUSH:System.out.println("推进");break;case FARMING:System.out.println("打野");break;}}
}

Java05 - 数据类型相关推荐

  1. Postman使用Date数据类型,Postman发送Date类型数据,Postman模拟前端调用

    Postman使用Date数据类型: 在form-data数据类型下,使用 2021/7/7 11:11:00 (yyyy/MM/dd HH:mm:ss) 的数据格式即可 如下: 在json数据格式中 ...

  2. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint

    在对比oracle数据库和大数据库的时候,发现了几个用以存放数字的新的类型bigint.decimal.smallint.tinyint,为了对比之间的不同,我进行了统计 bigint 可以精确的表示 ...

  3. NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存

    NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...

  4. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  5. 数据类型对应的字节数

    20210622 https://www.icode9.com/content-4-421680.html 32位和64位常用数据结构所占字节数 20210126 1 2 4 8 1248 刚好都是2 ...

  6. tensorflow2.0 基础一 常用数据类型及转换

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_43619065/arti ...

  7. 深入浅出Redis五种基本数据类型

    文章目录 1.String SDS(Simple Dynamic String) 2.RedisDB设计 3.List 4.Hash 5.Set intset 6.ZSet skiplist 1.St ...

  8. TVM自定义数据类型

    TVM自定义数据类型 本文将介绍"自定义数据类型"框架,该框架可在TVM中使用自定义数据类型. 介绍 在设计加速器时,关键是如何近似地表示硬件中的实数.这个问题具有长期的行业标准解 ...

  9. 自主数据类型:在TVM中启用自定义数据类型探索

    自主数据类型:在TVM中启用自定义数据类型探索 介绍 在设计加速器时,一个重要的决定是如何在硬件中近似地表示实数.这个问题有一个长期的行业标准解决方案:IEEE 754浮点标准.1.然而,当试图通过构 ...

最新文章

  1. 利用kickstart实现pxe自动安装linux
  2. golang sql查询获取结果集个数
  3. stl-优先队列priority_queue
  4. 在S/4HANA扩展字段的Available Fields列表里,看不到自己创建的扩展字段该怎么办
  5. HTML5新特征、窍门和技术(1~5)
  6. Spring Cloud Bus 消息总线实现配置自动刷新
  7. MySQL 半同步复制+MMM架构
  8. 别人在抢红包,程序员在研究红包算法
  9. Python问题:ImportError: cannot import name ‘Template‘ from ‘string‘
  10. matlab写实对角矩阵,Matlab对角矩阵
  11. ET城市大脑出海:阿里云发展世界级创新技术业务
  12. C#批量发送短信操作
  13. 我的世界虚无2可直连服务器IP,我的世界虚无世界服务器1.7.10
  14. 如何解决DNS解析错误故障
  15. 智能测试实践之路-UI 缺陷检测
  16. 微信公众号文章信息(阅读量、在看、点赞数)获取
  17. 电脑ppt录制微课软件哪个好 电脑ppt录制微课的方法
  18. Linux下挂载NTFS分区
  19. 基于微信云开发实现电影推荐小程序
  20. 非计算机专业全国壹级,非计算机专业专科学生全国计算机一级等级考试应试策略...

热门文章

  1. 未来站在中国这一边(读后感)
  2. Latex 制作表格出现以下错误 Extra alignment tab has been changed to \cr
  3. 全球与中国吸油产品市场深度研究分析报告
  4. 前端学习第16天:媒体查询-响应式布局
  5. 【网络安全】XXE漏洞详细解析
  6. c语言中逻辑非运算符的作用,C语言中逻辑运算符非!与或||的优先级怎么说?...
  7. 想自己上线微信小程序一定要会代码?
  8. 2.15 Spring Framework 5.x 之ApplicationContext附加功能
  9. 哈尔滨工业大学计算机系统大作业
  10. 计算机体系结构 第七章 网络