大数据预科班10
来源:互联网 发布:lcd1602不显示数据 编辑:程序博客网 时间:2024/04/30 02:55
大数据预科班10
复习
- Object:顶级父类---getClass获取对象的实际类型(实际子类,而不是声明的类),equals(判断两个对象是否相等,底层默认地址是否一致,需手动重写),toString(将对象转化为字符串,默认输出地址)
String
- final不能被继承
- 代表字符串,字符串是常量,创建之后不可被改变
- String s="a"; s="b"; s+="c";
- String s=new String("ab"); String s1="ab"; String s2="a"+"b"; String s3="s3"; s3+="b";
- 字面量:常量(六类)数值、字符、字符串
- JVM在编译时会优化String s3="a"+"b"; 即String s3="ab";
- StringBuilder
String s="a";s+="b";过程:s=new StringBulder("a").append("b").toString();//toString时,用new String(),即指向了堆
产生多少个对象
String s="a";a+="b";
- 1. a
- 2. StringBuilder
- 3. b
- 4. ab
- 5. 堆中对象
StringBuilder方法和StringBuffer一样
- StringBuilder线程不安全的
- StringBuffer线程安全
- StringBuilder
String创建之后不可改变
- 字符串是一个常量,定义后不可改变。
String[] ss=new String[100]; String a="";//第一个对象 for(String s:ss){ str+=s;//三个对象 } 3*100+1=301个对象StringBuilder sb=new StringBuilder();//1 for(String s:ss){ sb.append(s);//1 }String str=sb.toString();//1产生对象1+1*100+1=102
- 当拼接多个对象的时候建议使用StringBuilder(空间+时间),拼接较少时可以用+
测试用时间:System.currentTimeMillis()返回值为long类型(毫秒)
String方法
- charAt()//获取指定字符串的编号的值
String s="abc";//自动编号
- length()//获取字符串的长度
练习
- 1.输入字符串,判断是否为回文字符串
package com.peng.demo;import java.util.Scanner;public class TestDemo { public static void main(String[] args) { System.out.println("请输入一个字符串"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); s.close(); boolean isok = true; for (int start = 0, end = ss.length() - 1; start < end; start++, end--) { if (ss.charAt(start) != ss.charAt(end)) { isok = false; } } if (isok) { System.out.println("是回文数字!"); } else { System.out.println("不是回文数字!"); } }}
- 2.输入一个字符串,统计字符串中的字母,数字以及其他字符的个数
package com.peng.demo;import java.util.Scanner;public class TestDemo { public static void main(String[] args) { System.out.println("请输入一个字符串"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); s.close(); int sum1 = 0;// 字母个数 int sum2 = 0;// 数字个数 int sum3 = 0;// 其他字符个数 for (int i = 0; i < ss.length(); i++) { if (65 <= (int) (char) ss.charAt(i) && 97 >= (int) (char) ss.charAt(i)) { sum1++; } else if (48 <= (int) (char) ss.charAt(i) && 57 >= (int) (char) ss.charAt(i)) { sum2++; } else { sum3++; } } System.out.println("字母:" + sum1); System.out.println("数字:" + sum2); System.out.println("其他字符:" + sum3); }}
用'a','z','A','Z','0','9'更准确一些
- 3.字符串数字求和
package com.peng.demo;import java.util.Scanner;public class TestDemo { public static void main(String[] args) { System.out.println("请输入一个字符串"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); s.close(); int sum = 0; for (int i = 0; i < ss.length(); i++) { if (48 <= (int) (char) ss.charAt(i) && 57 >= (int) (char) ss.charAt(i)) { sum += Integer.parseInt(Character.toString(ss.charAt(i))); } } System.out.println(sum); }}
- 4.字符串提取数字并排序
package com.peng.demo;import java.util.Arrays;import java.util.Scanner;public class TestDemo { public static void main(String[] args) { System.out.println("请输入一个字符串"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); s.close(); int sum = 0;// 数组大小 for (int i = 0; i < ss.length(); i++) { if (48 <= (int) (char) ss.charAt(i) && 57 >= (int) (char) ss.charAt(i)) { sum++; } } // 创建数组 int[] arr = new int[sum]; int i = 0; // 将字符串中的整数存放在数组中 for (int j = 0; j < ss.length(); j++) { if (48 <= (int) (char) ss.charAt(j) && 57 >= (int) (char) ss.charAt(j)) { arr[i] = Integer.parseInt(Character.toString(ss.charAt(j))); i++; } } // 排序数组 Arrays.sort(arr); // 输出数组 System.out.println(Arrays.toString(arr)); }}
- 输入字符串,记录每个元素出现的次数
package com.peng.demo;
import java.util.Arrays; import java.util.Scanner;
//每种元素出现的次数 public class TestDemo { public static void main(String[] args) { System.out.println("请输入一个字符串"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); s.close(); // 将字符串转化为字符数组 char arr[] = ss.toCharArray(); // 对字符数组进行正序排序,方便后面的前后对比 Arrays.sort(arr); // 记录对应元素的总的出现的次数 int sum = 1; // 进行比较:前后一致进行次数加1,前后不同进行上次数据的输出和下次的新数据的开始 for (int i = 0; i <= arr.length - 2; i++) { if (arr[i + 1] == arr[i]) { sum++; if (i == arr.length - 2) { System.out.println(arr[arr.length - 2] + ":" + sum); } } else { System.out.println(arr[i] + ":" + sum); sum = 1; } } // 对最后的两个数据判断输出:不同才输出 if (arr[arr.length - 1] != arr[arr.length - 2]) { System.out.println(arr[arr.length - 1] + ":" + sum); } } }
运行程序如下:请输入一个字符串ji3488aa3:14:18:2a:2i:1j:1//思路://创建两个数组,一个数组存放字符,另一个数组存放int值进行对对应数组中的字符找出相同的数记录其对应的总数//思路://用Boolean数组+循环标记已经找出的数并输出其对应数的总数//false表示没访问过;true表示被统计过//遍历+后遍历
- compareTo按字典顺序进行比较(从小到大顺序)
底层机制: 1. 首先把两个字符串转化为字符数组 2. 按位相减--对象字符串的对应位置减去参数字符串的对应位置 3. 如果差不是0,则直接返回;如果差是0,下一位继续相减; 4. 如果每一位相减都为0,如果一个字符串首先遍历完了,返回对象字符串的长度之差结果:0两个字符串一致;正数,则说明对象字符串比较大;反之,参数字符串大;注:有大小写之分
- compareToIgnoreCase忽略大小写 比较
- concat拼接两个字符串
String中提供了一系列操作,但是不会改变原字符串【void改变值】【其他不改变】底层: 1. 将字符串转化字符数组 2. 将字符数组合并(System.arraycopy) 3. 将合并的数组转化为字符串(String s=new String(new char[]{'a','c'});)
- toCharArray将字符串转化为字符数组
- 字符数组转化为字符串(构造函数)(String s=new String(new char[]{'a','c'});)
- 字符数组按规则转为字符串(new String(字符数组, 偏移量(开始),转化字符个数))
- contains判断字符串是否包含指定的参数--返回值(true/false)
- endsWith判断字符串是否是参数指定结尾【筛选数据】
- equals判断两个字符串想的【比较的是内容】
重写了equals方法--地址,长度,内容
- equalsIgnoreCase忽略大小写比较
- toLowerCase转小写
- toUpperCase转大写
- getBytes获取字节数组【统计以B(字节)来的】
byte[] bs=new String("abc").getBytes();补充:编码表(码表)--不止一张,iso-8859-1西欧码表(一个字符一个字节),【插曲:笔画来存储,但是组装特别麻烦,最终放弃这个想法】,GB2312(早期中国),GBK(一个字符两字节--国标码--收录了常见的基本简体和部分繁体汉字),unicode编码体系--常用的【utf-8(一个字符占三个字节)】不同编码表一个字符占不同字节所有的码表默认兼容西欧码表,无论哪个码表,英文字符永远占一个字节//当没有指定编码的时候,默认使用系统平台【windows默认gbk】【unix,Linux默认为utf-8】
- new String(new Byte[]{},指定下标,长度,编码)字节数组转化为字符串
byte[] bs=s.getBytes("utf-8");//指定编码
- hashCode
String做过重写--同一个字符串在任何情况下hashCode一定一致,保证这个字符串的唯一性(不分系统和时间)【底层对应的hash码】
- isEmpty判断字符串是否为一个空串""(看字符串的长度是否为0),不是null!!
- 字符串为空null,空字符串""
- null身上没有任何的方法和属性,只要利用bull调用属性和方法会报空指针异常
练习
- 输入字符串和数字(表示字节个数),根据指定字节获取字符串,不能出现半个字符
注:gbk规定为两个字节存储一个汉字
System.out.println(new String(arr, 0, num - 1, "gbk"));中的-1
package com.peng.demo;import java.io.UnsupportedEncodingException;import java.util.Arrays;import java.util.Scanner;public class TestDemo { public static void main(String[] args) throws UnsupportedEncodingException { System.out.println("请输入一个字符串:"); Scanner s = new Scanner(System.in); String ss = s.nextLine(); System.out.println("请输入字节个数:"); int num = s.nextInt(); s.close(); byte[] arr = ss.getBytes("gbk"); System.out.println(arr.length); String temp = new String(arr, 0, num); if (temp.charAt(temp.length() - 1) != ss.charAt(temp.length() - 1)) { System.out.println(new String(arr, 0, num - 1, "gbk")); } else { System.out.println(temp); } }}
注意:
1. charAt()执行的返回结果为char,判断字母、数字、 其他字符时可以直接根据字符来判断,即'a','z','A','Z','0','9'来判断;
2. 如果是求字符串中数字和的话,可以这样做:Integer.parseInt(Character.toString(s.charAt(i)));即现将字符转化为字符串,再将字符串转化为整数。
3. c-'0'
4. 突发小问题:
字符串常量,程序结束前都存在
编码:char都为两字节;String考虑编码;java文件用Unicode编码
- 大数据预科班10
- 大数据预科班作业10
- 大数据预科班3
- 大数据预科班4
- 大数据预科班5
- 大数据预科班6
- 大数据预科班7
- 大数据预科班8
- 大数据预科班9
- 大数据预科班串讲
- 大数据预科班11
- 大数据预科班12
- 大数据预科班13
- 大数据预科班14
- 大数据预科班15
- 大数据预科班16
- 大数据预科班17
- 大数据预科班18
- Linux 平台多线程编程实例
- ubuntu16。04 安装谷歌输入法
- getopt_long函数
- python的zip()函数
- Redis_lesson7 Redis中Set的常见操作
- 大数据预科班10
- C/C++与Matlab混合编程初探
- 均线策略---使用quartz实现策略
- 欢迎使用CSDN-markdown编辑器
- Dropout解析及个人总结
- java设计模式之观察者模式
- codeforces Gym
- Hrbust 2064 萌萌哒十五酱的宠物~(树链剖分+线段树)
- composer安装